假设我有一个庞大的元素列表,其结构如下:
<div class="item">
<div class="header"></div>
<div class="body"></div>
<div class="meta"></div>
<div class="..."></div>
...
</div><!-- .item -->
我已经找到了一个元素,现在我必须找到一个'.body'。什么代码可以更快地运行:
$(el).find('.body')
或
$(el).find('.body').eq(0)
换句话说,jQuery会在第一个找到的元素上停止,还是先循环遍历所有元素,然后才会返回一个带有所选索引的元素?
答案 0 :(得分:6)
这个问题太荒谬了。 “如果我添加另一个函数或者我将它排除在等式之外会更快吗?”基本上就是你所要求的:
$(el).find('.body')
的速度提高了约6-7倍:http://jsperf.com/to-eq-or-not-to-eq
答案 1 :(得分:1)
您的第二个示例将始终较慢,因为它仅在包含与.body
匹配的所有元素的jQuery对象上调用其他方法。
获取第一个匹配元素的最快方法可能是:first选择器:
$(el).find(".body:first")
您还可以使用context
参数$()来保留一个方法调用,但benchmarks显示实际上更慢:
$(".body:first", el) // Slower, don't do that.
答案 2 :(得分:1)
.eq(0)
是对$(el).find('.body')
返回的对象的方法调用。它不能比单独$(el).find('.body')
更快。
答案 3 :(得分:0)
它们与在.eq('0')
的结果上调用的find('.body')
几乎相同。第二个是从不更快。
答案 4 :(得分:0)
$(el).find('.body:first')
或$(el).find('.body.eq(0)')
在逻辑上会更快,因为(至少)它执行较少的函数调用