Селекторы атрибутов в CSS
Стоит отметить, что все эти селекторы можно использовать как в CSS файлах, так и в JavaScript методах document.querySelector() и document.querySelectorAll(), принимающих любой валидный CSS селектор.
Основы селекторов атрибутов
Вы можете использовать квадратные скобки ([]), если хотите указать элемент по атрибуту. Если добавить знак равенства и кавычки (=""), можно указать конкретное значение.
/* Выбрать элементы с атрибутом data-sandwich */
[data-sandwich] {}
/* Выбрать элементы с атрибутом data-sandwich со значением равным tuna */
[data-sandwich="tuna"] {}Продвинутые селекторы атрибутов
Что делать с элементами, имеющими несколько значений? Частичные совпадения? Значения в другом порядке? CSS вам поможет!
Рассмотрим следующий элемент.
<div data-lunch="tuna-sandwich chips soda Cookie">My Lunch Order</div>Что, если нужно найти элемент с атрибутом [data-lunch], содержащий слово chips? Прямое указание на значение не сработает в приведённом выше примере, потому что chips — это всего лишь одно из нескольких значений атрибута [data-lunch].
/* Это не работает */
[data-lunch="chips"] {}Вместо этого поставьте перед значением тильду (~=""), чтобы сопоставить его со значением, разделённым пробелами.
/* Это работает */
[data-lunch~="chips"] {}Допустим, вы хотите найти tuna, но вам всё равно, будет ли это tuna-sandwich или tuna-salad. Для этого можно использовать вертикальную черту (|).
Будет соответствовать любому значению, которое является точным совпадением или совпадением, за которым следует тире (-).
/* Это соответствует */
[data-lunch|="tuna"] {}Если вы хотите проверить, начинается ли значение со строки, можно использовать символ каретки (^). В нашем примере ^="tuna" будет соответствовать, а ^="chips" — нет.
/* Это соответствует */
[data-lunch^="tuna"] {}
/* Это не соответствует */
[data-lunch^="chips"] {}Чтобы проверить, заканчивается ли значение строкой, используйте знак доллара ($). В нашем примере $="Cookie" совпадает, потому что Cookie — это завершающее значение атрибута [data-lunch].
/* Это соответствует */
[data-lunch$="Cookie"] {}Чтобы проверить наличие подстроки в любом месте значения, не заботясь о том, является ли она отдельным словом или нет, можно использовать звёздочку (*).
В нашем примере *="Cook" будет соответствовать, потому что Cookie содержит строку Cook.
/* Это соответствует */
[data-lunch*="Cook"] {}Наконец, вы можете игнорировать регистр, используя i после значения. Если нужно найти любой экземпляр cookie, независимо от того, написан он с заглавной буквы или нет, сделаем следующее.
/* Это соответствует */
[data-lunch~="cookie" i] {}