jQuery .removeClass()没有做任何事情的奇怪问题

时间:2013-01-26 00:11:29

标签: jquery css jquery-ui settimeout

我有一些代码可以为一个元素添加类,然后尝试删除它们,并在1秒后添加不同的代码。我得到了一些非常奇怪的行为,我甚至无法在一个简单的jsfiddle example中重现。

以下是我的相关JavaScript代码:

console.log('before destroyed: ' + currentTile.get(0).className);
currentTile.addClass(classes.destroyed);
console.log('after destroyed: ' + currentTile.get(0).className);

setTimeout(function () {
    console.log('before blanking: ' + currentTile.get(0).className);
    currentTile.removeClass().addClass(classes.blank + ' ui-draggable');
    console.log('after blanking: ' + currentTile.get(0).className);
}, 2000);

以下是控制台的说法:

enter image description here

正如您所看到的,添加destroyed类工作正常,但removeClass()内部对setTimeout的调用似乎无效,然后是.addClass(classes.blank + ' ui-draggable');也似乎工作正常。另外,如果我将一个类传递给removeClass,它会删除那个没有问题的类。

如果是上下文问题或currentTile是错误的元素,我会认为addClass也会失败?任何人都知道这里发生了什么?

其他信息:jQuery最新(我认为v.1.9.0),jQuery UI v 1.10.0,Chrome v.24.0.1312.56 m


修改:问题似乎与jQuery UI直接相关,可以在this fiddle中看到。


编辑2 :这已被确认为bug in jQuery,并已修复。

1 个答案:

答案 0 :(得分:11)

尝试使用.removeAttr('class')而不是.removeClass()

样本:

http://jsfiddle.net/MvvmJ/8/

希望这有帮助,如果您有任何问题,请告诉我们!