有没有更有效的写法$('parent > child')?

发布于 2024-12-12 07:55:49 字数 200 浏览 0 评论 0原文

给定以下选择器 $('parent > child'),我相信 jQuery 将首先查询所有 'child' 元素,然后再过滤到 'parent' 的直接后代。这可能非常低效。

我的第一直觉是使用$('parent').find('child'),但结果显然和$('parent > child')不一样。

有没有更好的方法来编写这个选择器?

Given the following selector $('parent > child'), I believe jQuery will first query for all 'child' elements before filtering down to those that are direct descendants of 'parent'. This can be very inefficient.

My first instinct is to use $('parent').find('child'), but the result is obviously not the same as $('parent > child').

Is there a better way to write this selector?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

围归者 2024-12-19 07:55:49

jQuery 有一个 .children() 方法,该方法仅选择直接子级。

另外,不用担心这些事情!除非你有一个巨大的应用程序或者是出于好奇,否则没有理由深入研究这个。如果您过于频繁地使用选择器,只需“缓存”它即可:$tabs = $('.tabs')。一个好的做法是在代表选择器的变量前面使用 $。

jQuery has a .children() method that only selects the immediate children.

Also, don't worry about this stuff! Unless you have a gigantic app or it's out of curiosity there's no reason to delve into this. If you are using a selector way too often just "cache" it: $tabs = $('.tabs'). A good practice is to use $ in front of variables that represent selectors.

2024-12-19 07:55:49

我相信 jQuery 将首先查询所有“子”元素,然后再过滤到“父”的直接后代元素。

实际上,这个假设并不完全正确:

只要有可能,jQuery 都会使用浏览器的本机 querySelectorAll DOM 遍历,这是尽可能快的。

所以,只要:

...您应该可以使用 parent > child 而不必关心性能。

如果您碰巧需要任何 jQuery 特定选择器,请记住这一点:

因为 :first 是 jQuery 扩展而不是 CSS 规范的一部分,所以使用 :first 的查询无法利用本机 DOM querySelectorAll() 方法提供的性能提升。

要在使用 :first 选择元素时获得最佳性能,请首先使用纯 CSS 选择器选择元素,然后使用 .filter(":first")。

I believe jQuery will first query for all 'child' elements before filtering down to those that are direct descendants of 'parent'.

Actually, this assumption isn't quite correct:

Whenever possible, jQuery uses the browser's native querySelectorAll DOM traversal, which is as fast as it gets.

So, as long as:

… you should be just fine with using parent > child without having to care about performance.

If you happen to need any of the jQuery specific selectors, keep this in mind:

Because :first is a jQuery extension and not part of the CSS specification, queries using :first cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method.

To achieve the best performance when using :first to select elements, first select the elements using a pure CSS selector, then use .filter(":first").

深白境迁sunset 2024-12-19 07:55:49

$('parent > child') 将检索子项的所有首次出现的实例。如果您的 div 中包含 div,则 $('div#one > div') 将仅返回第二级 div,而不是所有子级。就效率而言,我不认为这有什么问题。然而,Radagaisus 的建议也有效。

<div id="one">
  <div> <!-- returned -->
    <div></div> <!-- ignored -->
    <div></div> <!-- ignored -->
    <div></div> <!-- ignored --> 
  </div>
  <div> <!-- returned -->
    <div></div> <!-- ignored -->
    <div></div> <!-- ignored -->
    <div></div> <!-- ignored --> 
  </div>
</div>

$('parent > child') will retrieve all first occurring instances of a child. If you have a div with divs within divs, $('div#one > div') will only return the 2nd level divs, instead of all of the children. I don't see anything wrong with this as far as efficiency goes. However, Radagaisus's suggestion works as well.

<div id="one">
  <div> <!-- returned -->
    <div></div> <!-- ignored -->
    <div></div> <!-- ignored -->
    <div></div> <!-- ignored --> 
  </div>
  <div> <!-- returned -->
    <div></div> <!-- ignored -->
    <div></div> <!-- ignored -->
    <div></div> <!-- ignored --> 
  </div>
</div>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文