如果缓存了选择器,.find() 是否会再次遍历 DOM?
Does .find() traverse the DOM again if the selector is cached?
我使用这个简单的函数来缓存我的选择器:
var selector_cache = function(){
var collection = {};
function get_from_cache( selector ) {
if (undefined === collection[selector]) {
collection[selector] = $(selector);
}
return collection[selector];
}
return { get: get_from_cache };
};
为了获取我的缓存选择器,我执行以下操作:
window.selectors = new selector_cache();
var $selectors = window.selectors;
var $program_home = $selectors.get('section#program_home');
我的问题是:做$program_home.find('.home_section');
jQuery是要再次遍历DOM吗?或者它是否从缓存版本中获取选择器的 children?
我想避免再次遍历 DOM,所以如果 jQuery 再次遍历 DOM,也许最好的解决方案是将 children 缓存为好吧(?)像这样:$selectors.get('section#program_home .home_section');
感谢任何建议!
您的 $selectors
变量是一个 jQuery 对象,并且您已经在该对象 (.find
) 上显式调用了一个方法,所以是的,它将遍历 DOM 再次(尽管只查看该节点的后代,而不是整个 DOM)。
"Doing $program_home.find('.home_section'); jQuery is going to
traverse the DOM again? Or does it get the children of the selector
from the cached version?"
嗯,都不是。
$program_home
变量包含一个 jQuery 对象,该对象包含对先前使用 section#program_home
选择器找到的元素的引用。
find
方法不会搜索整个 DOM,它只会搜索那些元素内部。如果当前还有其他元素也与原始选择器匹配,则不包括在内。
这个操作根本不涉及选择器缓存。
我使用这个简单的函数来缓存我的选择器:
var selector_cache = function(){
var collection = {};
function get_from_cache( selector ) {
if (undefined === collection[selector]) {
collection[selector] = $(selector);
}
return collection[selector];
}
return { get: get_from_cache };
};
为了获取我的缓存选择器,我执行以下操作:
window.selectors = new selector_cache();
var $selectors = window.selectors;
var $program_home = $selectors.get('section#program_home');
我的问题是:做$program_home.find('.home_section');
jQuery是要再次遍历DOM吗?或者它是否从缓存版本中获取选择器的 children?
我想避免再次遍历 DOM,所以如果 jQuery 再次遍历 DOM,也许最好的解决方案是将 children 缓存为好吧(?)像这样:$selectors.get('section#program_home .home_section');
感谢任何建议!
您的 $selectors
变量是一个 jQuery 对象,并且您已经在该对象 (.find
) 上显式调用了一个方法,所以是的,它将遍历 DOM 再次(尽管只查看该节点的后代,而不是整个 DOM)。
"Doing $program_home.find('.home_section'); jQuery is going to traverse the DOM again? Or does it get the children of the selector from the cached version?"
嗯,都不是。
$program_home
变量包含一个 jQuery 对象,该对象包含对先前使用 section#program_home
选择器找到的元素的引用。
find
方法不会搜索整个 DOM,它只会搜索那些元素内部。如果当前还有其他元素也与原始选择器匹配,则不包括在内。
这个操作根本不涉及选择器缓存。