/ / Durchläuft .find () das DOM erneut, wenn der Selektor zwischengespeichert ist? - Abfrage, Zwischenspeicherung

Durchläuft .find () das DOM erneut, wenn der Selektor zwischengespeichert ist? - Jquery, Caching

Ich benutze diese einfache Funktion, um meine Selektoren zwischenzuspeichern:

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

Um meine zwischengespeicherten Selektoren zu erhalten, gehe ich folgendermaßen vor:

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

Meine Frage ist: Tun $program_home.find(".home_section"); jQuery wird das DOM erneut durchlaufen? Oder werden die untergeordneten Elemente des Selektors aus der zwischengespeicherten Version abgerufen?

Ich möchte vermeiden, das DOM erneut zu durchlaufen. Wenn also jQuery das DOM erneut durchläuft, ist es möglicherweise die beste Lösung, die untergeordneten Elemente ebenfalls wie folgt zwischenzuspeichern (?): $selectors.get("section#program_home .home_section");

Vielen Dank für jeden Vorschlag!

Antworten:

3 für die Antwort № 1

"$ Program_home.find (". Home_section ") ausführen; jQuery geht zu DOM erneut durchqueren? Oder bekommt es die Kinder des Selektors von der zwischengespeicherten Version? "

Nun, auch nicht.

Das $program_home Die Variable enthält ein jQuery-Objekt, das Verweise auf die Elemente enthält, die zuvor mit der gefunden wurden section#program_home Wähler.

Das find Diese Methode durchsucht nicht das gesamte DOM, sondern sucht nur innerhalb dieser Elemente. Wenn derzeit andere Elemente vorhanden sind, die ebenfalls mit der ursprünglichen Auswahl übereinstimmen, werden diese nicht berücksichtigt.

Der Auswahlcache ist an dieser Operation überhaupt nicht beteiligt.


1 für die Antwort № 2

Ihre $selectors Variable ist ein jQuery - Objekt, und Sie haben explizit eine Methode für dieses Objekt aufgerufen (.find) Also ja, es wird das DOM erneut durchlaufen (wenngleich nur die Nachkommen dieses Knotens betrachtet werden, nicht das gesamte DOM).