Hug*_*ron 7 performance jquery
鉴于以下标记
<ul class="list">
<li>first item</li>
?<li class="item">second item</li>
<li>third item</li>
</ul>?????????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
哪两个这两个表达式最好选择第二个li?
$("ul li.item")
Run Code Online (Sandbox Code Playgroud)
要么
$("ul li").filter(".item")
Run Code Online (Sandbox Code Playgroud)
这不是一个很好的例子,因为它太简单了(我知道我可以做$(".item"),但一般来说,我应该使用复杂的选择器还是过滤器功能?
编辑:如果第一个更有效,何时适合/最好使用过滤功能?
Nic*_*ver 18
第一个更快:
$("ul li.item")
Run Code Online (Sandbox Code Playgroud)
这是真的,因为它是等价的,但没有运行选择器引擎(Sizzle)两次到达那里.
对于你的编辑:你使用.filter()......好吧,当你需要过滤当前的集合,或者你需要一个复杂的过滤器.例如,如果您想链接但不再选择该组:
$("ul li").addClass('everyItem').filter('.item').fadeOut();
Run Code Online (Sandbox Code Playgroud)
或复杂的过滤器:
$("ul li").filter(function() {
return $.data(this, 'hasSomething');
}).fadeOut();
Run Code Online (Sandbox Code Playgroud)
过滤器有很多用途,它实际上取决于最适合的情况.与你的问题有关,$(selector).filter(selector)...我想不出一个案例,如果它完全可能你想要一个选择器.我不能做到这一点的唯一一个案例是复杂:has()和:not()包装.