【问题标题】:jQuery selector vs filter()jQuery 选择器与过滤器()
【发布时间】:2011-03-28 13:03:35
【问题描述】:

鉴于以下标记

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

这2个表达式中哪一个更适合选择第二个li?

$("ul li.item")

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

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

编辑:如果第一个更有效,什么时候使用过滤功能合适/最好?

【问题讨论】:

    标签: jquery performance


    【解决方案1】:

    第一个更快:

    $("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() 包装。

    【讨论】:

    • 非常感谢,很有意义!
    猜你喜欢
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 2015-08-26
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多