/ / ¿.Find () atraviesa el DOM nuevamente si el selector está en caché? - jquery, almacenamiento en caché

¿.Find () recorre el DOM nuevamente si el selector está en caché? - jquery, almacenamiento en caché

Utilizo esta función simple para almacenar en caché mis selectores:

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 };
};

Para obtener mis selectores en caché, hago lo siguiente:

window.selectors = new selector_cache();
var $selectors = window.selectors;
var $program_home = $selectors.get("section#program_home");

Mi pregunta es: haciendo $program_home.find(".home_section"); jQuery va a atravesar el DOM nuevamente? ¿O obtiene los hijos del selector de la versión en caché?

Me gustaría evitar atravesar el DOM nuevamente, por lo que si jQuery atraviesa el DOM nuevamente, tal vez la mejor solución es almacenar también en caché a los hijos (?) De esta manera: $selectors.get("section#program_home .home_section");

Gracias por cualquier sugerencia!

Respuestas

3 para la respuesta № 1

"Haciendo $ program_home.find (". Home_section "); jQuery va a atravesar el DOM de nuevo? ¿O consigue a los hijos del selector de la versión en caché?

Pues tampoco.

los $program_home La variable contiene un objeto jQuery que contiene referencias a los elementos que se encontraron anteriormente utilizando section#program_home selector.

los find el método no "buscará en todo el DOM, solo buscará dentro de esos elementos. Si actualmente hay otros elementos que también coincidirían con el selector original, esos no están incluidos.

El caché del selector no está involucrado en absoluto en esta operación.


1 para la respuesta № 2

Tu $selectors variable es un objeto jQuery, y "ha invocado explícitamente un método en ese objeto (.find) así que sí, volverá a atravesar el DOM (aunque solo busque descendientes de ese nodo, no todo el DOM).