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

jba*_*bey 12 css jquery jquery-ui settimeout

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

这是我的相关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);
Run Code Online (Sandbox Code Playgroud)

以下是控制台的说法:

在此输入图像描述

正如你所看到的,添加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直接相关,可以在这个小提琴中看到发生.


编辑2:这被确认为jQuery中的一个错误,并已得到修复.

Dom*_*Dom 11

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

DEMO:

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

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

  • 谢谢你的回答.虽然这是我将要做的解决方法,但直到我弄清楚为什么jQuery UI打破`removeClass`时我的好奇心才会停止:P (2认同)
  • @jbabey,你有没有弄明白为什么jQuery UI破坏了removeClass()?我们认为我们遇到了同样的问题,并且很想知道为什么...... (2认同)
  • @jeesty我报告了这个bug并且它已经修复了,所以你不应该再看到同样的问题了.http://bugs.jqueryui.com/ticket/9015 (2认同)