jquery removeClass()不删除所有类[重复]

Posted

技术标签:

【中文标题】jquery removeClass()不删除所有类[重复]【英文标题】:jquery removeClass() not removing all classes [duplicate] 【发布时间】:2013-04-27 15:30:01 【问题描述】:

我有一个这样的元素:

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

当我在浏览器控制台中运行这段代码时:

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

我明白了:

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

换句话说,它不起作用;它不会删除元素上的任何类。不幸的是,我无法在 jsfiddle 中重现它。

但是,我可以删除一个特定的类:

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

此外,这将删除所有类:

$("#waterhorse").removeAttr("class");

知道为什么后者可以删除所有类,但前者不能吗?

【问题讨论】:

@roasted 引用jQuery spec:“如果参数中没有指定类名,所有类都将被移除。”所以这应该可行。 在这里工作:jsfiddle.net/tKTgE/1 @mises 您看到这种行为的任何特定浏览器(版本)吗?还是有什么特殊情况? 由于过于本地化而关闭。代码确实有效,您的问题无法复制,您甚至都懒得详细说明细节。 我也有同样的问题。我知道用于旧版本 jQuery 的代码。 jQuery 1.9.1 和 jQuery UI 1.10.0 的组合似乎有问题。如果我删除了对 jQuery UI 的引用,那么 removeClass() 函数就会再次起作用。我将尝试测试稍新版本的 jQuery 和 JQuery UI,看看它们是否能解决问题。 【参考方案1】:

似乎这是 jQuery 和 jQueryUI 不能很好地一起玩的一个已知问题:

Odd issue with jQuery .removeClass() not doing anything

http://bugs.jqueryui.com/ticket/9015

上面的答案是使用.removeAttr('class')而不是.removeClass()的解决方法

【讨论】:

我遇到了同样的问题。它“存在”,即使它不应该存在。解决方法效果很好。【参考方案2】:

如果我们阅读documentation,它会说明:

如果包含一个类名作为参数,那么只有该类会 从匹配的元素集中删除。如果没有类名 参数中指定,所有类都将被删除。

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

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

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

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

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

【讨论】:

使用最新的 chrome、canary、FF。我也无法在 jsfiddle 中重现。奇怪的问题。【参考方案3】:

您可以在 $(document).ready() 中执行此操作以实现此目的。

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

or

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

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

【讨论】:

以上是关于jquery removeClass()不删除所有类[重复]的主要内容,如果未能解决你的问题,请参考以下文章

JQuery属性与样式——删除样式.removeClass()和切换样式.toggleClass()

[ jquery 方法 removeClass([class|fn]) ] 此方法为每个匹配的元素删除指定的类名

jQuery removeClass() 方法

原生JS实现addClass,removeClass,toggleClass

jQuery的属性与样式之增加样式.addClass(),删除样式.removeClass()

jQuery学习笔记 .addClass()/.removeClass()简单学习