HTML 标记:
<div>
<a id="foo"> </a>
</div>
jQuery:
$('div').each(function(){
$('#foo', this).dosmth(); // 1
$('#foo').dosmth(); // 2
});
哪种方法运行 dosmth
会更快?
最佳答案
由于我们得到了各种各样的答案,希望这里有一些清晰度(check the examples here):
- 最快 - 无需循环。跳过
$("div").each
部分,只执行$("#foo")
。foo
是一个 ID,因此查找是即时的。 - Middling -
$("#foo")
循环。请注意,您也不希望这样做,因为它会为页面上的每个 div 执行该函数(因此,在包含大量 div 的较大文档上,这将是最慢的)。 - 最慢 -
$("#foo", this)
。上下文节点首先没有帮助,然后考虑 jQuery 将首先从this
构建一个 jQuery 对象并将其转换为$(this).find("#foo ")
。当然,这都是不必要的。
底线:在大多数情况下(例如,有时当确认一个 ID 在一个上下文中而不是另一个上下文中时)ID 查找不需要上下文节点。
这里有一些来自 jQuery 源的资源:
- Handling for most of the cases here - 请注意,
$("#id")
被单独作为document.getElementById
进行处理
-
find
- 当你传递上下文时会发生什么
关于javascript - jQuery 选择器的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6454034/