2010-01-25 18 views
9

Questa è più una domanda di curiosità. Nel fare il seguente:prestazioni jQuery quando si selezionano più articoli

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

Vuol jQuery traverse completamente il DOM due volte per ottenere ogni set di oggetti corrispondenti a ciascun selettore o è vero trovando tutti gli elementi in un unico attraversamento del DOM?

+0

Non penso così perché da ciò che ho visto in core le corrispondenze sono state eseguite con espressioni regolari su varie proprietà del nodo (nodeName, NodeType, id, ecc.) Quindi ogni singolo selettore produce un'iterazione del DOM. Tuttavia, non sono al 100% positivo su questo, quindi mi dilungherò con gli altri più familiari con gli interni :-) – prodigitalson

+0

in realtà l'esempio è sbagliato perché il '' nodo non esiste in HTML :) –

+0

Penso che quello che vuoi fare è cerca il motore di selezione, Sizzle, di cui puoi consultare il codice sorgente: http://github.com/jeresig/sizzle/ http://github.com/jeresig/sizzle/blob/master/sizzle.js – artlung

risposta

1

penso che utilizza le funzioni native del browser per trovare questo, utilizzando:

document.getElementsByClassName() 
1

E 'davvero dipende dal browser. Nei browser più recenti, userà document.querySelectorAll per qualsiasi query DOM (in questo modo chiama document.getElementsByClassName per le classi). Nei browser più vecchi che non supportano questo, allora deve capirlo da solo, che ovviamente sarà più lento.

In generale, si consiglia di trovare prima le cose con ID (o almeno restringere l'ambito). I nomi delle classi e dei tag sarebbero i prossimi per la velocità. Fondamentalmente, le operazioni DOM supportate in modo nativo sono le migliori.

+0

Sembra che nella maggior parte dei casi, attraverserà il DOM ogni volta per ciascun selettore. Sebbene il modo in cui attraversa il DOM sarà diverso in base al tipo di selettore (elemento contro ID e classe)? –

+0

Sì, userà un'espressione regolare per dividere tutte le query ed eseguirle una alla volta. Non mi preoccuperei delle prestazioni per classi o id, però. –

Problemi correlati