jQuery缓存选择器



我有一个id为#wrapper的div,所有元素都在里面。我通过

缓存包装器
var $wrapper = $('#wrapper');

现在任何时候我想创建一个选择器或引用一个元素,我做

$wrapper.find('#whatever').click(....

通过这样做,我避免了再次使用jQuery对象包装,所以我将来做的任何选择器都将基于缓存的$wrapper。但另一方面,当我使用find()与缓存的$包装器,我知道它会搜索#wrapper内的所有元素。我的问题是哪一个更好更好,使用缓存变量与查找然后问题点击事件,或只是简单地做$('#whatever').click(..

whatever可以是类也可以是id。

如果你在whateverIDID的地方使用它,那么$('#whateverID').click(..会给你稍微更好的性能,但是如果whateverCLASS是类或ID以外的任何东西,$wrapper.find('whateverCLASS').click(....会更好,因为遍历将被限制到特定的容器,这是整个DOM的子集

性能方面,最好缓存DOM元素的"包装"版本。否则每次执行$("#myElem")时都要遍历DOM如果DOM非常大或者执行了很多次,成本会非常高

两者并不完全等同。您的缓存版本实际上与$("#wrapper #whatever")相同,如果没有包含在包装器div中,则不会匹配id为whatever的元素。

如果您总是打算将#whatever元素放在#wrapper中,那么$('#whatever')实际上可能比您的缓存版本更快-通过ID查找元素涉及单个函数调用,getElementById,这在所有浏览器中都可用,而您的缓存版本涉及检查层次结构以确保匹配的#whatever元素来自#wrapper

$('selector', context) so…

$('#whatever', $wrapper)

只在$wrapper

上下文中搜索DOM

最新更新