Selektory CSS są dopasowane przez silniki przeglądarki od prawej do lewej. Najpierw znajdują dzieci, a następnie sprawdzają rodziców, czy pasują do reszty reguł.
- Dlaczego to?
- Czy to tylko dlatego, że specyfikacja mówi?
- Czy wpływa to na ostateczny układ, jeśli był oceniany od lewej do prawej?
Dla mnie najprostszym sposobem na to byłoby użycie selektorów z najmniejszą liczbą elementów. Najpierw identyfikatory (ponieważ powinny zwracać tylko 1 element). Wtedy może klasy lub element, który ma najmniejszą liczbę węzłów - np. Może istnieć tylko jeden zakres na stronie, więc przejdź bezpośrednio do tego węzła z dowolną regułą, która odwołuje się do zakresu.
Oto kilka linków potwierdzających moje roszczenia
- http://code.google.com/speed/page-speed/docs/rendering.html
- https://developer.mozilla.org/en/Writing_Efficient_CSS
Wygląda na to, że robi się to w ten sposób, aby uniknąć konieczności patrzenia na wszystkie dzieci rodzica (które mogą być wielu), a nie na wszystkich rodziców dziecka, które musi być jednym. Nawet jeśli DOM jest głęboki, sprawdziłby tylko jeden węzeł na poziom zamiast wielu w dopasowaniu RTL. Czy łatwiej / szybciej jest oceniać selektory CSS LTR lub RTL?
#foo
selektor będzie musiał dopasować wszystkie te węzły. jQuery ma opcję powiedzenia, że $ („# foo”) zawsze zwróci tylko jeden element, ponieważ definiują one własne API z własnymi regułami. Ale przeglądarki muszą implementować CSS, a CSS mówi, aby dopasować wszystko w dokumencie do podanego identyfikatora.
querySelectorAll
). W innych przypadkach stosuje się Sizzle. Sizzle nie pasuje do wielu identyfikatorów, ale QSA tak (AYK). Wybrana ścieżka zależy od selektora, kontekstu oraz przeglądarki i jej wersji. Interfejs API zapytań jQuery korzysta z tego, co nazwałem „Najpierw natywnym, podwójnym podejściem”. Napisałem o tym artykuł, ale nie działa. Chociaż można tu znaleźć: fortybelow.ca/hosted/dhtmlkitchen/JavaScript-Query-Engines.html