jQuery选择器vs filter()

时间:2010-08-11 17:58:37

标签: jquery performance

给出以下标记

<ul class="list">
    <li>first item</li>
    ​<li class="item">second item</li>
    <li>third item</li>
</ul>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

哪两个这两个表达式最好选择第二个li?

$("ul li.item")

$("ul li").filter(".item")

这不是一个很好的例子,因为它太简单了(我知道我可以做$(".item"),但总的来说,我应该使用复杂的选择器还是过滤器功能?

编辑:如果第一个更有效,何时使用过滤功能是合适/最佳?

1 个答案:

答案 0 :(得分:18)

第一个更快:

$("ul li.item")

这是真的,因为它是等价的,但没有运行选择器引擎(Sizzle)两次到达那里。

对于您的修改:您使用.filter() ...当您需要过滤当前集时,或需要复杂过滤器时。例如,如果您想链接但不再选择该组:

$("ul li").addClass('everyItem').filter('.item').fadeOut();

或复杂的过滤器:

$("ul li").filter(function() {
  return $.data(this, 'hasSomething');
}).fadeOut();

过滤器有许多用途,它实际上取决于最适合的情况。与你的问题有关,$(selector).filter(selector) ...我想不出一个案例,如果它完全可能,你会想要这个。我无法做到这一点的唯一理由就是复杂:has():not()包裹。