Comments 21
К тому же, когда браузер парсит CSS, он ищет в DOM'е элементы, совпадающие с заданными селекторами. Так тут просто нам этот же функционал дали в JS. Если браузер не поддерживает JS, то у него просто не будут работать скрипты. Если браузер не поддерживает какой-либо селектор CSS, он просто не вернёт элементов по запросу querySelector/querySelectorAll.
по поводу абстракции: мне думается, селекторы — это лишь способ поиска (или, если хотите, указания) элементов в DOM'е, и CSS использует именно этот метод для навешивания стилей на элементы.
Посмотрите, что нам говорит спецификация Selectors (жирным выделил я):
Selectors are patterns that match against elements in a tree. Selectors have been optimized for use with HTML and XML, and are designed to be usable in performance-critical code.
CSS (Cascading Style Sheets) is a language for describing the rendering of HTML and XML documents on screen, on paper, in speech, etc. CSS uses Selectors for binding style properties to elements in the document.
…
These expressions can also be used, for instance, to select a set of elements, or a single element from a set of elements, by evaluating the expression across all the elements in a subtree.
STTS (Simple Tree Transformation Sheets), a language for transforming XML trees, uses this mechanism.
То же самое нам говорит спецификация Selectors API:
Selectors, which are widely used in CSS, are patterns that match against elements in a tree structure
При этом Selectors API ссылается именно на спецификацию Selectors!
Очевидно, что селекторы выделяют в отдельную сущность — метод поиска элементов в дереве. Ещё раз отмечу — не слияние поведения и стиля, но логичное выделение удобного метода поиска элементов в DOM'е в отдельную сущность.
Но не стоит забывать, что он использует найденные документы только лишь для задания их стиля (мелкософтных expressions не было в начальной версии CSS) в отрыве от их поведения.
Вот именно что в спецификации Selectors этот отрыв сознательно сделали.
P.S. expressions используется только в правилах CSS, в селекторах никогда не использовался.
Поэтому пользоваться полноценно селекторами можно будет только ко времени релиза ИЕ9, когда количество пользователей ИЕ6 станет настолько незначительнам, что им ими можно будет пренебреч при разработке веб-сайтов.
В целом подобная функциональность очень удобно. Я лично ее использую очень часто.
Например, есть у нас некие элементы, они имеют опредленную "одинаковую функциональность". В ХТМЛ мы лишь указываем им класс, а дальше яваскриптом всем им инициализируем нужную функциональность.
Частый пример - визивиг редакторы. Мы лишь добавляем textarea, указываем класс, а в итоге получаем визифиг редактор.
Кроме того это вполне логично. Цсс указывает нам как надо отображать элементы. И не важно, обратывает это браузер или яваскрипт-код.
Selectors API — IE8b1 и Webkit