为什么jQuery为class属性添加空格?

时间:2010-05-25 10:26:31

标签: jquery

我在jQuery中遇到.removeClass().addClass()的一些奇怪问题。

具体来说,似乎当我使用.removeClass()时,该类确实被移除了,但是在它的位置留下了一个空格。然后当我.addClass("secondclass")时,我得到class=" secondclass"(前面有空格)。

我正在使用jQuery 1.4.1

这是预期的行为还是错误?怎么阻止它?

更新

有些人已经问过这会导致什么问题。好吧,我正在使用这些:

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

我正在使用Firefox 3.6.3进行测试

不会触发类名前面的空格。当我手动移除空间时它工作正常。似乎这个问题比空间问题更多,并且很可能空间没有引起任何问题(很高兴它已经消失了) - 将分开发布关于正在进行的问题的问题。

4 个答案:

答案 0 :(得分:7)

因为多个类被空格分隔:

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

在特殊条件下添加空格而不是代码更容易。在上文中,您只需将"class3"替换为"",如果您要将其删除,请将其更改为:

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

否则你需要担心是否是第一堂课是否在那里上课。另外,你的标记可能会在那里(故意或无意)放置多个空格。

答案 1 :(得分:2)

这是jQuery版本1.4.1中的错误,但这在jQuery版本1.4.2中已得到修复。如果要停止此行为,可以使用最新版本。

答案 2 :(得分: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......
});

答案 3 :(得分: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('');
}