2010-05-25 62 views
1

我在jQuery中遇到了.removeClass().addClass()的一些奇怪问题。为什么jQuery为类属性添加一个空格?

具体来说,当我使用.removeClass()时,该类确实被删除,但是留下了一个空格。那么当我.addClass("secondclass")我得到class=" secondclass"(与前面的空间)。

我使用jQuery 1.4.1

这是预期的行为或错误?如何阻止它?

UPDATE:

有些人问这是导致什么问题。好吧,我使用变薄:

$("img.someclass").click(function() { 

我用Firefox 3.6.3

测试这种不与在类名的前面的空间触发。当我手动删除它的工作正常的空间。 似乎这个问题比空间问题还要多,而且很可能这个空间并没有引起任何问题(很高兴它已经消失了); - 会就持续的问题发布单独的问题。

+4

这是造成问题吗? – spender 2010-05-25 10:28:06

+0

@spender - 它似乎是,但也许这是我错误地归因于此的另一个问题。我会检查出来并回到这里。 – UpTheCreek 2010-05-25 10:31:36

+0

我检查过了,是的,它似乎是罪魁祸首 - 看到我的更新。 – UpTheCreek 2010-05-25 10:46:20

回答

2

这是jQuery的1.4.1版本的bug,但这种固定在jQuery的1.4.2版本。如果你想停止这种行为,你可以使用最新版本。

+0

更新至1.4.2,并且可以确认空间已经消失。谢谢。 – UpTheCreek 2010-05-25 11:01:17

7

由于多个类别之间用空格delimeted:

<div class="class1 class2 class3">...</div> 

它更容易在特殊条件下添加一个空格,而不是代码。在上面,你可以简单地用""更换"class3",如果你想删除它,将其更改为:

<div class="class1 class2 ">...</div> 

否则,你不必担心它是否是第一类或不作为是否要离开班级存在。另外,您的标记可能会在那里放置多个空间(有意或无意)。

+0

我知道课堂是由空间隔开的,但是单个课堂前面的空间并不常见。当然,这并不需要太多的代码来检查这种情况。如果它不是一个错误,它有点草率。 – UpTheCreek 2010-05-25 11:00:58

+1

@Sosh它不是无效的,所以当有人使用Firebug检查结果时,你会为案件添加额外的处理。不是一个高度优先的用例。 – cletus 2010-05-25 12:09:06

+0

是的,我想是的。无论如何,事实证明,这不是造成根本问题的原因。谢谢 – UpTheCreek 2010-05-25 12:14:16

1

@cletus解释,但你可以使用jQuery的$.trim功能把空格去掉过,虽然我不知道你为什么要这么做:

$('selector').attr('class', $.trim($('selector').attr('class')); 

更新:

你可以做像这样:

var class = $('selector').attr('class', $.trim($('selector').attr('class')); 

$("img." + class).click(function() { 
    // your code...... 
}); 
+0

该空间正在引起我的问​​题 - 请参阅更新。我会看看这个作为替代。谢谢。 – UpTheCreek 2010-05-25 10:49:27

+0

@Sosh:请看我最新的答案。 – Sarfraz 2010-05-25 10:55:58

1

这是因为jQuery是一个编码很差的库,不应该使用它。在这里,我已经写了另一对实际工作:

function addClass(node, name) { 
    node.className += (node.className ? ' ' : '') + name; 
} 
function removeClass(node, name) { 
    node.className = node.className. 
    split(' ' + name).join(''). 
    split(name).join(''); 
} 
+0

问题不在于他们不工作。没有课程时,问题在于幻影空间。不知道为什么你不应该使用jQuery,如果它是适当的,我从来没有任何问题,说实话。 – 2010-05-25 10:33:19

+0

挂上...你是说上面的代码在我的答案*不工作?它的工作原理,比用于OP的目的的jQuery代码更好 - 只有当其他人存在时才会插入领先。它还可以删除/不加空格 - 这意味着不会留下任何空格。 – 2010-05-25 10:37:36

+0

不,我不是说你的代码不工作。我不知道你从哪里得到这个想法。 – 2010-05-25 14:00:01

相关问题