如果找到0匹配,jQuery会继续过滤吗?

wee*_*oid 6 jquery

我有一个关于jQuery过滤效率的问题.我刚写了很长的表达式,我想知道如果当前匹配数为0,jQuery是否会停止过滤.

passengers.filter('input.FromDate[value="01/09/2011"]')
          .closest('tr')
          .filter('input.ToDate[value="08/09/2011"]')
          .length;
Run Code Online (Sandbox Code Playgroud)

如果在第一次filter()调用之后匹配的数量为0,jQuery将继续搜索DOM还是放弃额外的调用并返回0?

kar*_*m79 1

使用 jQuery 进行链式调用的好处是,当没有匹配项时,不会发生任何不好的事情。

当您调用.filter并产生零个匹配时,您根据定义执行随后的链接方法调用,因为它们是直接在返回的对象上调用的(这就是链接)。

当没有匹配项时,JavaScript 仍将调用每个返回对象上的每个后续链接方法。发生多少浪费的处理取决于具体方法的实施方式。

$.fn.doesItTryToDoStuff = function() {
    alert('called');

    // here I could have some wasteful process
    // which could foolishly be executed
    // even when there are no elements


    return this.each(function() {
       $(this).css("border", "1px solid red"); 
    });
};

$("input").filter("[value='foo']").doesItTryToDoStuff().doesItTryToDoStuff();
Run Code Online (Sandbox Code Playgroud)

演示。

我希望大多数 jQuery 方法都经过编码,以便在测试集合的长度之前不会发生任何剧烈的情况,但你永远不知道。