我在jQuery中遇到.removeClass()
和.addClass()
的一些奇怪问题。
具体来说,似乎当我使用.removeClass()
时,该类确实被移除了,但是在它的位置留下了一个空格。然后当我.addClass("secondclass")
时,我得到class=" secondclass"
(前面有空格)。
我正在使用jQuery 1.4.1
这是预期的行为还是错误?怎么阻止它?
更新
有些人已经问过这会导致什么问题。好吧,我正在使用这些:
$("img.someclass").click(function() {
我正在使用Firefox 3.6.3进行测试
不会触发类名前面的空格。当我手动移除空间时它工作正常。似乎这个问题比空间问题更多,并且很可能空间没有引起任何问题(很高兴它已经消失了) - 将分开发布关于正在进行的问题的问题。
答案 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('');
}