2010-01-25 18 views
9

Dies ist eher eine Frage Neugier. Wenn Sie folgendermaßen vorgehen:jQuery Leistung bei der Auswahl mehrerer Elemente

$('.selector1, .selector2').doSomething() 

Hat zweimal das DOM vollständig durchqueren jQuery jeden Satz von Objekten zu erhalten jeden Wähler passende oder es findet alle Elemente in einem Durchlauf des DOM?

+0

Ich denke nicht, weil von was ive im Kern gesehen die Übereinstimmungen mit Regex auf verschiedenen Knoten-Eigenschaften (nodeName, NodeType, ID, etc.) getan wird So erzeugt jeder einzelne Selektor eine Iteration des DOM. Allerdings bin ich nicht 100% positiv auf diese, so werde ich auf andere vertrauter mit den Interna verschieben :-) – prodigitalson

+0

eigentlich ist das Beispiel schlecht, weil '' Knoten existiert nicht in HTML :) –

+0

Ich denke, was Sie tun möchten, ist Suchen Sie nach der Selektor-Engine Sizzle, deren Quellcode Sie sich ansehen können: http://github.com/jeresig/sizzle/ http://github.com/jeresig/sizzle/blob/master/sizzle.js – artlung

Antwort

1

Ich denke, es nutzt die nativen Browser-Funktionen dieses zu finden, mit:

document.getElementsByClassName() 
1

Es hängt wirklich von dem Browser. In neueren Browsern wird document.querySelectorAll für alle DOM-Abfragen verwendet (unter der Haube ruft dies document.getElementsByClassName für Klassen auf). In älteren Browsern, die dies nicht unterstützen, muss es es selbst herausfinden, was natürlich langsamer ist.

In der Regel sollten Sie lieber zuerst per ID suchen (oder zumindest den Umfang einschränken). Klassen und Tag-Namen wären die nächsten für die Geschwindigkeit. Grundsätzlich sind die nativ unterstützten DOM-Operationen am besten.

+0

Es klingt in den meisten Fällen so, es wird jedes Mal für jeden Selektor das DOM durchlaufen. Wie unterscheidet sich das DOM von der Art des Selektors (Element vs. ID vs. Klasse)? –

+0

Ja, es wird eine Regex verwenden, um alle Ihre Anfragen zu teilen und sie nacheinander auszuführen. Ich würde mir keine Sorgen um die Leistung für Klassen oder IDs machen. –

Verwandte Themen