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

时间:2012-11-13 10:15:58

标签: jquery performance addclass

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

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

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

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

但是,首先使用hasClass是否有任何性能改进,或者这是否使用addClass所做的相同方法,因此重复逻辑?

3 个答案:

答案 0 :(得分:154)

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

答案 1 :(得分:11)

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

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

答案 2 :(得分:6)

对于它的价值,我的有限测试中.hasClass()的性能有所提升:http://jsperf.com/jquery-hasclass-vs-addclass-and-removeclass

但是,即使单独的.removeClass()报告在Chrome中报告的速度要慢几倍,也会导致每秒大约70,000次操作。