Javascript jquery:$(“?”?“)什么时候扫描整个DOM?

Javascript jquery:$(“?”?“)什么时候扫描整个DOM?,javascript,jquery,Javascript,Jquery,当使用$(“#xxx”)时,我猜jQuery使用的是getElementById 那么$(“.xxx”)它是否每次都扫描整个DOM呢?许多浏览器不支持将GetElementsByCassName作为本机DOM函数,因此jQuery必须通过检查每个元素的类来完成这项工作。jQuery尝试使用最快的选择方法来获取所需的内容。有许多与jQuery直接相关的具有性能优化技巧的优秀资源: 请参见$功能的链接。如果未提供,则默认为整个文档 所以要回答你的问题: $('whatever'); // sc

当使用
$(“#xxx”)
时,我猜jQuery使用的是
getElementById


那么
$(“.xxx”)
它是否每次都扫描整个DOM呢?

许多浏览器不支持将
GetElementsByCassName
作为本机DOM函数,因此jQuery必须通过检查每个元素的类来完成这项工作。

jQuery尝试使用最快的选择方法来获取所需的内容。有许多与jQuery直接相关的具有性能优化技巧的优秀资源:

请参见
$
功能的链接。如果未提供,则默认为整个
文档

所以要回答你的问题:

$('whatever'); // scans the entire `document`

$('whatever', element); // scans only within element

下面是document.getElementsByClassName的兼容性表:

getElementsByClassName的绿色浏览器不需要对$(“.className”)选择器进行完整的DOM扫描,而是使用浏览器本机方法。红色的会慢一些

尽管如此,这种差异并不像你想象的那么明显,即使对于数千个元素也是如此

美元(“.xxx”)怎么样?它每次都扫描整个DOM吗

如果不进行缓存:是。缓存非常简单:

var $myCachedElements = $('.myElements'); // DOM querying occurs

$myCachedElements.animate({left: '1000px'}, 'slow'); // no DOM Querying this time, as long as you use the variable.

jQuery可能不会缓存查询结果。在这里查看源代码(单击大按钮):哦,现在jQuery使用Sizzle选择器引擎。(都是由John Resig编写的)但在我上次回忆起gEBCN之前,它确实尝试使用任何选择器API方法?然后最小的公分母是循环通过每个元素CLSA。所以这基本上类似于执行element.find('whatever')?