jQuery .hasClass()vs .is()

时间:2011-02-04 18:26:00

标签: jquery

从性能角度来看,

是否有一种确定元素是否被赋值的首选方法?

$('#foo').hasClass('bar');

$('#foo').is('.bar');

4 个答案:

答案 0 :(得分:161)

更新

我在评论之后进行了一次测试,并且四次赞成评论。事实证明,我所说的是正确的答案。结果如下:

enter image description here

http://jsperf.com/hasclass-vs-is-so


is是多用途的,您可以执行is('.class')is(':checked')等操作,这意味着is 要做更多事情 hasClass的位置是有限的,只检查是否设置了一个类。

因此,如果任何级别的表现是您的首要任务,hasClass应该更快。

答案 1 :(得分:13)

由于ishasClass更通用,并使用filter来处理提供的表达式,因此hasClass似乎更快。

我从Firebug控制台运行以下代码:

function usingIs() {
for (var i=0; i<10000;i++) {
 $('div#example-0').is('.test');
}
}

function usingHas(){
for (var i=0; i<10000;i++) {
 $('div#example-0').hasClass('test');
}
}

usingIs();
usingHas();

我得到了:

  • usingIs:3191.663ms
  • usingHas:2362.523ms

没有太大差异,但如果您正在进行批次测试,则可能会有所帮助。

编辑当我说'没有太大的区别时,我的观点是你需要做10000个周期才能看到0.8s的差异。我很惊讶地看到一个Web应用程序,从is切换到hasClass会在所有性能上看到显着改善。但是,我承认速度提高了35%。

答案 2 :(得分:9)

两者在性能方面应该非常接近但$('#foo').hasClass('bar');对我来说似乎更具可读性和语义性。

答案 3 :(得分:7)

.hasClass.is快得多 您可以从here进行测试。根据你改变测试用例。