2014-11-10 18 views
45

Ho sentito dire che querySelector & querySelectorAll sono nuovi metodi per selezionare gli elementi DOM. Come si confrontano con i vecchi metodi, getElementById & getElementsByClassName in termini di prestazioni e supporto del browser?Javascript querySelector vs. getElementById

Come si confronta il rendimento con il selettore di query di jQuery?

Esiste una raccomandazione di best practice per quale set nativo da utilizzare?

+1

Definire meglio. Sono quasi completamente diversi. –

+3

Questo è come chiedere "è una chiave inglese a misura singola meglio di una chiave regolabile?" La risposta è: sono più potenti e più flessibili, e quindi in molte occasioni superiori, ma 'getElementById' e' getElementsByClassName' sono ancora ideali per gli scopi descritti dai loro nomi. – lonesomeday

+0

Se stai chiedendo specificamente i luoghi in cui si sovrappongono, tutto dipende. 'qS' e' qSA' potrebbero essere più lenti (o forse no). 'qSA' ha un supporto più ampio complessivo di' gEBCN'. 'gEBCN' restituisce una" lista live "e' qSA' no. –

risposta

58

"Meglio" è soggettivo.

querySelector è la funzione più recente.

getElementById è supportato meglio di querySelector.

querySelector è supportato meglio di getElementsByClassName.

querySelector consente di trovare elementi con regole che non possono essere espressi con getElementById e getElementsByClassName

È necessario scegliere lo strumento appropriato per un dato compito.

(in precedenza, per querySelector leggi querySelector/querySelectorAll).

+4

supporto querySelector: http://caniuse.com/#feat=queryselector – tazboy

20

Le funzioni getElementById e getElementsByClassName sono molto specifiche, mentre querySelector e querySelectorAll sono più elaborate. La mia ipotesi è che avranno prestazioni peggiori.

Inoltre, è necessario verificare il supporto di ciascuna funzione nei browser che si desidera utilizzare. Più è recente, maggiore è la probabilità di mancanza di supporto o la funzione è "bacata".

+18

Ecco la differenza di prestazioni: http://jsperf.com/getelementbyid-vs-queryselector Sì, è incredibilmente grande! A proposito, mi piace questa risposta, dal momento che è così breve ma contiene ancora molte informazioni. – thomas

+0

@thomas il tuo link non funziona. C'è un collegamento funzionante ovunque? – user5508297

+1

Esistono diverse versioni archiviate: https://web.archive.org/web/20160108040024/http://jsperf.com/getelementbyid-vs-queryselector Ma il test è in realtà molto vecchio (2010), quindi il risultato potrebbe essere molto diverso con motori più moderni. – thomas