我应该在"addClass"之前使用"hasClass"吗?

Cur*_*urt 99 performance jquery addclass

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

if (!$("div").hasClass("a")){
   $("div").addClass("a");
}
Run Code Online (Sandbox Code Playgroud)

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

$("div").addClass("a");
Run Code Online (Sandbox Code Playgroud)

但是,通过使用hasClassfirst 是否有任何性能改进,或者这是否使用相同的方法addClass,因此重复逻辑?

Jon*_*Jon 159

.hasClass()检查是没有用的,因为jQuery的也会经常检查从内.addClass().这只是额外的工作.


Gab*_*oli 11

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

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

  • 你好塞萨洛尼基和+1 - 我不知道`#LX-Y`技巧:) (3认同)
  • 嘿Jon :)它也可以选择鼠标..(*点击行号并移动+点击另一行选择所有行..*) (3认同)

chr*_*isM 6

对于它的价值,.hasClass()在我的有限测试中有一个性能改进:http://jsperf.com/jquery-hasclass-vs-addclass-and-removeclass

但是,即使.removeClass()在Chrome中独立报告速度慢几倍,它每秒大约会有70,000次操作.