jQuery的removeClass()方法无法移除所有类

8

我有一个这样的元素:

<div class="one two three" id="waterhorse">horse</div>

当我在浏览器控制台运行此代码时:
$("#waterhorse").removeClass();

I get this:

[<div id=​"waterhorse" class=​"one two three">​horse​</div>​]

换句话说,它不能正常工作,无法移除元素上的任何类。不幸的是,我无法在 jsfiddle 上重现它。
然而,我可以删除一个特定的类:
$("#waterhorse").removeClass("two");

此外,这将删除所有类:
$("#waterhorse").removeAttr("class");

任何想法为什么后者可以删除所有类,但前者不能?

3
引用自jQuery规范:“如果在参数中没有指定类名,则将删除所有类。” 因此,这个应该可以工作。 - Sirko
4
这是需要翻译的内容:Works here: http://jsfiddle.net/tKTgE/1/ 这里的代码可以在网站jsfiddle上运行,链接为http://jsfiddle.net/tKTgE/1/。 - A. Wolff
2
@mises 你看到这种行为的特定浏览器(版本)吗?或者有任何特殊的上下文环境吗? - Sirko
1
关闭为过于局部化。代码确实可以工作,您的问题无法复制,并且您甚至都不愿意详细说明。 - dsgriffin
2
我有同样的问题。我知道这段代码在旧版本的jQuery中能够正常工作。看起来这是jQuery 1.9.1和jQuery UI 1.10.0组合的问题。如果我删除对jQuery UI的引用,removeClass()函数就会再次工作。我将尝试测试稍微更新的jQuery和JQuery UI版本,看看它们是否可以解决问题。 - Ben Mills
显示剩余5条评论
3个回答

10

我曾经遇到过同样的问题。即使不应该存在,它仍然“存在”。解决方法很好用。 - Garavani

-1

如果我们阅读文档,它声明如下:

如果将类名作为参数包含在内,则只会从匹配的元素集中删除该类。 如果未在参数中指定类名,则将删除所有类。

换句话说,.removeClass()应该可以在没有参数的情况下正常工作。 我已经在Firefox中尝试过,并且这是按照预期工作的。

我尝试重现您遇到的问题,但无法实现:jsFiddle

<div class="one two three" id="waterhorse">horse</div>

$("#waterhorse").removeClass();
$("#waterhorse").addClass("four");
console.log($("#waterhorse"));

你使用的浏览器版本是什么?

使用最新版本的Chrome、Canary和Firefox。我也无法在jsfiddle中重现这个问题。这是一个奇怪的问题。 - mises

-2

你可以在$(document).ready()中实现此操作。

$("#waterhorse").attr("class", "");

or

$("#waterhorse").removeClass();

希望这能对你有所帮助。:)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接