4

我经常想知道 jQuery 中选择器与等效函数的使用。我的意思是包含返回相同结果集但构造不同的相同组件的语句。

举个例子:

alert($("#FundManager1>option").length);
alert($("#FundManager1").find("option").length);

(注意:目的是针对两个等效的查询 - 如果这些查询并不总是相同,如果您能指出这一点,我将不胜感激)

那么,鉴于上面的例子,速度/性能有什么真正的区别吗?显然,前者更短,因此会导致上传/下载的字节数更少,但我目前对此并不感兴趣。

4

1 回答 1

5

我会说第一个更快,因为它只解析一个 CSS 选择器并且只查找子项,而第二个必须解析两个,并且必须查找所有后代。

但我不会为这么小的事情而烦恼。由于 JavaScript 在 WebKit 和 Gecko 中非常快,而在 IE 中仍然相对较快,所以没有人会注意到其中的区别。


从我通过查看 jQuery/ Sizzle源代码可以看出,两段代码在内部执行相同的操作。

首先document.getElementById('FundManager1')执行(Sizzle足够聪明,知道这#FundManager1意味着什么),然后option使用它作为上下文来完成搜索。两段代码之间的唯一区别是>选择器的使用,导致Sizzle只搜索上下文的直接子代,而不是所有后代。我认为这更快,因为只需要探索一层 DOM 层次结构。


另一个编辑:

以上文字仅适用于不支持该document.querySelectorAll(css_selector)方法的浏览器!在支持的浏览器中(WebKit 和 Gecko,也许是 Opera?)使用此方法代替Sizzle,因此所有 CSS 选择器解析都由浏览器本身完成,而不是 jQuery 框架,我敢肯定它要快得多。

于 2010-01-14T14:18:01.083 回答