jQuery选择器vs filter()

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()包装.