是否有一种确定元素是否被赋值的首选方法?
$('#foo').hasClass('bar');
或
$('#foo').is('.bar');
答案 0 :(得分:161)
我在评论之后进行了一次测试,并且四次赞成评论。事实证明,我所说的是正确的答案。结果如下:
http://jsperf.com/hasclass-vs-is-so
is
是多用途的,您可以执行is('.class')
,is(':checked')
等操作,这意味着is
要做更多事情 hasClass
的位置是有限的,只检查是否设置了一个类。
因此,如果任何级别的表现是您的首要任务,hasClass
应该更快。
答案 1 :(得分:13)
由于is
比hasClass
更通用,并使用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();
我得到了:
没有太大差异,但如果您正在进行批次测试,则可能会有所帮助。
编辑当我说'没有太大的区别时,我的观点是你需要做10000个周期才能看到0.8s的差异。我很惊讶地看到一个Web应用程序,从is
切换到hasClass
会在所有性能上看到显着改善。但是,我承认速度提高了35%。
答案 2 :(得分:9)
两者在性能方面应该非常接近但$('#foo').hasClass('bar');
对我来说似乎更具可读性和语义性。
答案 3 :(得分:7)
.hasClass
比.is
快得多
您可以从here进行测试。根据你改变测试用例。