如何了解 jQuery 选择器在幕后的工作原理?

Posted

技术标签:

【中文标题】如何了解 jQuery 选择器在幕后的工作原理?【英文标题】:How can I learn how jQuery selectors work behind the scenes? 【发布时间】:2012-07-22 19:42:14 【问题描述】:

例如,当我们使用$('div span')时,jQuery是如何为我们做这样的搜索的呢?

它是先搜索span 元素还是先搜索div

好像jQuery官网对这些东西没有解释;它只是向我们展示了通过 API 可以使用哪些功能。

我想知道每种类型的 jQuery 选择器是如何实现的,所以我可以选择最好的选择器来使用。

你知道我在哪里可以得到这些信息吗?

【问题讨论】:

确定的答案在这里:github.com/jquery/jquery 查看jQueru源代码code.jquery.com/jquery-latest.js 而在特定选择器的情况下,确定的答案往往在这里:github.com/jquery/sizzle 另一方面,如果您根据搜索效率最高的选择器来选择选择器,那么您可能在进行完全不相关的微优化。 【参考方案1】:

概括地说,你需要知道的:

    jQuery 读取选择器from right to left。 Using an exact ID is fastest,后跟使用准确的标签名称,因为它们使用优化的 javascript 原生方法。 像 :first-child 这样的原生 CSS 选择器是像 :first 这样的 faster than jQuery selectors。

您也可以阅读official Sizzle documentation,但它并没有真正讨论优化技术。

【讨论】:

【参考方案2】:

它首先搜索span 元素。它将选择器解析为:

    tagName = span 的任何元素 拥有一个 tagName = div 的祖先

对于第一部分,它可以使用getElementsByTagName 方法查找所有span 元素,然后它必须遍历每个元素的祖先以查找div 元素。

【讨论】:

【参考方案3】:

寻找最简单的地方是直接从源头阅读。从 jquery 站点下载 uncompresserd 源并从原始源中读取它的作用和顺序。

http://jquery.com/download/

【讨论】:

【参考方案4】:

正如@Juhana 所评论的那样,如果你想知道 jQuery 用于根据其选择器选择对象的具体方法,请查看 github 存储库:

https://github.com/jquery/jquery/

或者,查看未压缩的 jQuery 下载中提供的源代码:

http://jquery.com/download/

如果你只是想知道有哪些不同的选择器可供你使用,jQuery 在这里提供了它们的列表:

http://api.jquery.com/category/selectors/

【讨论】:

【参考方案5】:

它们是从右到左解析的。

见http://csswizardry.com/2011/09/writing-efficient-css-selectors/和Why do browsers match CSS selectors from right to left?

【讨论】:

以上是关于如何了解 jQuery 选择器在幕后的工作原理?的主要内容,如果未能解决你的问题,请参考以下文章

CUDA 分析如何“在幕后”工作?

带有块的 UIView 动画如何在幕后工作

jQuery 的选择器在 iframe 中不起作用

jQuery - 如何使用选择器在表格中查找特定单元格?

jQuery *= 选择器在 IE8 中不起作用

jQuery 属性选择器在 Internet Explorer 中不起作用