javascript - jQuery 选择器的性能

标签 javascript jquery jquery-selectors

HTML 标记:

<div>

 <a id="foo"> </a>

</div>

jQuery:

$('div').each(function(){

 $('#foo', this).dosmth(); // 1
 $('#foo').dosmth();       // 2

});

哪种方法运行 dosmth 会更快?

最佳答案

由于我们得到了各种各样的答案,希望这里有一些清晰度(check the examples here):

  1. 最快 - 无需循环。跳过 $("div").each 部分,只执行 $("#foo")foo 是一个 ID,因此查找是即时的。
  2. Middling - $("#foo") 循环。请注意,您也不希望这样做,因为它会为页面上的每个 div 执行该函数(因此,在包含大量 div 的较大文档上,这将是最慢的)。
  3. 最慢​​ - $("#foo", this)。上下文节点首先没有帮助,然后考虑 jQuery 将首先从 this 构建一个 jQuery 对象并将其转换为 $(this).find("#foo ")。当然,这都是不必要的。

底线:在大多数情况下(例如,有时当确认一个 ID 在一个上下文中而不是另一个上下文中时)ID 查找不需要上下文节点。

这里有一些来自 jQuery 源的资源:

关于javascript - jQuery 选择器的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6454034/

相关文章:

javascript - 将任何 Bootstrap 绑定(bind)到动态 HTML

网站加载时 Javascript 按钮处于事件状态

jquery - 关于 jQuery 选择器的问题

javascript - 如何以 Angular 动态创建嵌套Json文件?

javascript - Android 上的初始 pageYOffset 值(是否已缓存?)

javascript - 我必须用 jquery.append() 指定结束标记吗?

javascript - jQuery 递归查找子项,但忽略某些元素

javascript - JQuery 并在多种形式中获取 1 个隐藏值

javascript - JPG转div JS+循环

javascript - 如何使用jquery在twitter bootstrap3中使用nav nav-pills过滤投资组合网格