I selettori CSS sono abbinati dai motori del browser da destra a sinistra. Quindi prima trovano i bambini e poi controllano i loro genitori per vedere se corrispondono al resto delle parti della regola.
- Perchè è questo?
- È solo perché dice la specifica?
- Influisce sul layout finale se è stato valutato da sinistra a destra?
Per me il modo più semplice per farlo sarebbe usare i selettori con il minor numero di elementi. Quindi prima gli ID (in quanto dovrebbero restituire solo 1 elemento). Quindi forse le classi o un elemento che ha il minor numero di nodi, ad esempio potrebbe esserci solo un intervallo nella pagina, quindi vai direttamente a quel nodo con qualsiasi regola che fa riferimento a un intervallo.
Ecco alcuni link a sostegno delle mie affermazioni
- http://code.google.com/speed/page-speed/docs/rendering.html
- https://developer.mozilla.org/en/Writing_Efficient_CSS
Sembra che sia fatto in questo modo per evitare di guardare tutti i figli dei genitori (che potrebbero essere molti) piuttosto che tutti i genitori di un figlio che devono essere uno. Anche se il DOM è profondo, guarderebbe solo un nodo per livello anziché multiplo nella corrispondenza RTL. È più facile / veloce valutare i selettori CSS LTR o RTL?
#foo
selettore dovrebbe corrispondere a tutti quei nodi. jQuery ha la possibilità di dire che $ ("# foo") restituirà sempre solo un elemento, perché stanno definendo la propria API con le proprie regole. Ma i browser devono implementare CSS e CSS dice di abbinare tutto nel documento con l'ID specificato.
querySelectorAll
). In altri casi, viene utilizzato Sizzle. Sizzle non corrisponde a più ID ma QSA lo fa (AYK). Il percorso preso dipende dal selettore, dal contesto, dal browser e dalla sua versione. L'API Query di jQuery utilizza ciò che ho definito "Native First, Dual Approach". Ho scritto un articolo su questo, ma non funziona. Anche se puoi trovare qui: fortybelow.ca/hosted/dhtmlkitchen/JavaScript-Query-Engines.html