jQuery .hasClass()vs .is()
从性能的angular度来看,是否有一种确定元素是否被赋予类别的首选方法?
$('#foo').hasClass('bar');
要么
$('#foo').is('.bar');
更新:
我在一个评论和四个赞扬评论之后做了一个testing。 事实certificate,我所说的是正确的答案。 结果如下:
http://jsperf.com/hasclass-vs-is-so
这is
多用途的,你可以做的is('.class')
, is(':checked')
等等,这意味着有更多的事情 , hasClass
是有限的,只有检查一个类正在设置或不。
因此,如果在任何级别的性能是您的优先事项, hasClass
应该更快。
由于is
比hasClass
更通用,并使用filter
来处理提供的expression式,所以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();
我有:
- 使用的是:3191.663ms
- 使用时间:2362.523ms
没有什么太大的差别,但是如果你正在进行大量的testing,这可能是相关的。
编辑时,我说“没有太大的差异,我的观点是,你需要做10000个周期才能看到差异的0.8s。 看到一个web应用程序,我们会惊讶地发现,从hasClass
转换到hasClass
将会在所有的性能上有显着的改善。 不过,我承认速度提高了35%。
在性能方面两者应该相当接近,但是$('#foo').hasClass('bar');
对我来说似乎更具可读性和语义上的正确性。
.hasClass
比.hasClass
快得多。你可以从这里testing它。 根据你的情况改变testing用例。