【问题标题】:Should I use "hasClass" before "addClass"? [duplicate]我应该在“addClass”之前使用“hasClass”吗? [复制]
【发布时间】:2012-11-01 18:32:12
【问题描述】:

我遇到过以下脚本,它检查一个元素是否具有类 a,如果没有,则添加它:

if (!$("div").hasClass("a")){
   $("div").addClass("a");
}

如果类已经存在,jQuery 将不会添加它,因此可以将其更改为:

$("div").addClass("a");

但是,首先使用hasClass 是否有任何性能改进,还是使用与addClass 相同的方法,因此重复了逻辑?

【问题讨论】:

    标签: jquery performance addclass


    【解决方案1】:

    .hasClass() 检查没有用,因为 jQuery will also always check 来自 .addClass()。这只是额外的工作。

    【讨论】:

    • 谢谢你的链接,它是错误的行高亮,但函数确实检查cur.indexOf( " " + clazz + " " ) < 0,这意味着答案是正确的。
    【解决方案2】:

    您可以在源代码中看到:https://github.com/jquery/jquery/blob/master/src/attributes/classes.js#L38-L45 在使用 addClass 时,他们确实会检查该类是否存在。

    所以在这种情况下没有理由使用.hasClass()..(如果你想在元素没有类的情况下执行更多操作则例外..

    【讨论】:

    • 来自塞萨洛尼基的你好和 +1 -- 我不知道 #LX-Y 把戏 :)
    • Hey Jon :) 它也可以用鼠标选择..(单击行号并按住 shift+单击另一个以选择所有行..
    【解决方案3】:

    不管怎样,.hasClass() 在我的有限测试中提高了性能:http://jsperf.com/jquery-hasclass-vs-addclass-and-removeclass

    但是,即使独立的 .removeClass() 在 Chrome 中报告速度要慢几倍,它也以每秒大约 70,000 次操作的速度出现。

    【讨论】:

    • 谢谢,不错的工具,但是问题中是addClass,测试中是removeClass
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    相关资源
    最近更新 更多