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

时间:2009-09-23 18:32:12

标签: javascript jquery

使用$("#xxx")时我猜想jQuery使用getElementById

$(".xxx")每次扫描整个DOM怎么样?

5 个答案:

答案 0 :(得分:6)

jQuery尝试使用最快的选择方法来获取您的要求。有许多优秀的资源,其中包含与jQuery直接相关的性能优化技巧:

Good ways to improve jQuery selector performance?

http://www.artzstudio.com/2009/04/jquery-performance-rules/

http://www.componenthouse.com/article-19

http://www.learningjquery.com/2006/12/quick-tip-optimizing-dom-traversal

答案 1 :(得分:4)

请参阅$功能的context argument。如果未提供,则默认为整个document

所以回答你的问题:

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

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

答案 2 :(得分:1)

  

每次扫描整个DOM时,$(“。xxx”)怎么样?

如果你不进行缓存:是的。缓存很简单:

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

这是document.getElementsByClassName的兼容性表:http://www.quirksmode.org/dom/w3c_core.html#gettingelements

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

差异并不像你想象的那么明显,即使对于成千上万的元素也是如此。