Селектори CSS узгоджуються двигунами браузера справа наліво. Тож вони спочатку знаходять дітей, а потім перевіряють батьків, чи вони відповідають решті частин правила.
- Чому це?
- Це тільки тому, що говорить специфікація?
- Чи впливає це на можливий макет, якщо його оцінювали зліва направо?
Для мене найпростішим способом це було б використання селекторів з найменшою кількістю елементів. Отже, ідентифікатори спочатку (як вони повинні повернути лише 1 елемент). Тоді можуть бути класи або елемент, який має найменшу кількість вузлів - наприклад, на сторінці може бути лише один проміжок, тому переходьте безпосередньо до цього вузла з будь-яким правилом, яке посилається на проміжок.
Ось декілька посилань, що підтверджують мої претензії
- http://code.google.com/speed/page-speed/docs/rendering.html
- https://developer.mozilla.org/uk/Writing_Efficient_CSS
Здається, що це робиться таким чином, щоб уникнути необхідності дивитися на всіх батьків батьків (яких може бути багато), а не на всіх батьків дитини, які повинні бути одним. Навіть якщо DOM є глибоким, він би дивився лише на один вузол на рівні, а не на кілька у відповідність RTL. Чи легше / швидше оцінити CSS-селектори LTR або RTL?
#foo
селектор повинен відповідати всім цим вузлам. jQuery має можливість сказати, що $ ("# foo") завжди поверне лише один елемент, оскільки вони визначають власний API зі своїми правилами. Але веб-переглядачам потрібно впроваджувати CSS, і CSS каже, щоб узгодити все в документі з заданим ідентифікатором.
querySelectorAll
). В інших випадках використовується Sizzle. Sizzle не відповідає декільком ідентифікаторам, але QSA (AYK). Проведений шлях залежить від селектора, контексту та браузера та його версії. jQuery's Query API використовує те, що я назвав "Спочатку, подвійний підхід". Я написав статтю про це, але це вниз. Хоча ви можете знайти тут: fourbelow.ca/hosted/dhtmlkitchen/JavaScript-Query-Engines.html