jQuery缓存选择器
我有id #wrapper
div,所有元素都在里面。 我正在通过这样做来缓存包装器
var $wrapper = $('#wrapper');
现在,无论何时我想制作一个选择器或引用一个元素,我都可以
$wrapper.find('#whatever').click(....
通过这样做,我避免再次使用jQuery对象包装,因此我将来做的任何选择器都将基于缓存的$wrapper
。 但另一方面,当我使用带有缓存的$ wrapper的find()
时,我知道它会搜索#wrapper
所有元素。 我的问题是更好更好,使用缓存变量以及查找然后发出click事件,或者只是简单地执行$('#whatever').click(..
whatever
是类还是id whatever
可以。
如果你在whateverID
ID
是ID
地方使用它,那么$('#whateverID').click(..
会给你稍微好一点的性能,但是如果whateverCLASS
是$wrapper.find('whateverCLASS').click(....
是类还是ID
以外的任何东西, $wrapper.find('whateverCLASS').click(....
会更好,因为遍历将限于特定容器,它是整个DOM的子集
性能方面,最好缓存DOM元素的“包装”版本。 否则,每次你执行$("#myElem")
时你都会遍历DOM,如果你的DOM非常大或者你做了很多次,这会变得非常昂贵。
这两者并不完全相同。 您的缓存版本实际上与$("#wrapper #whatever")
,并且如果它不包含在包装器div中,则不会与具有id的元素匹配。
如果你总是希望#whatever
元素在#wrapper
,那么$('#whatever')
实际上可能比你的缓存版本更快 – 按ID查找元素涉及单个函数调用getElementById
,它可以在所有浏览器,而您的缓存版本涉及检查层次结构以确保匹配的#whatever
元素来自#wrapper
。
怎么样$(’选择器’,上下文)所以……
$('#whatever', $wrapper)
仅在$ wrapper的上下文中搜索DOM
当您可以搜索单个分支或树枝时,请勿搜索整个树。