【问题标题】:jquery removeClass() not removing all classes [duplicate]jquery removeClass()不删除所有类[重复]
【发布时间】: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,看看它们是否能解决问题。

标签: javascript jquery


【解决方案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();

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

【讨论】:

    猜你喜欢
    • 2019-04-16
    • 1970-01-01
    • 2013-09-29
    • 2015-01-18
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    相关资源
    最近更新 更多