Это невозможно с помощью CSS2.1, но это возможно с помощью селекторов, совпадающих с подстрокой атрибута CSS3 (которые являются поддерживаемыми в IE7 +):
div[class^="status-"], div[class*=" status-"]
Обратите внимание на символ пробела ввторой селектор атрибута.Он выбирает div
элементов, чей атрибут class
удовлетворяет одному из следующих условий:
[class^="status-"]
- начинается с "status -"
[class*=" status-"]
- содержит подстроку «status-», возникающую непосредственно после пробела.Имена классов разделяются пробелом в спецификации HTML , отсюда и символ пробела.Это проверяет любые другие классы после первого, если указано несколько классов, и добавляет бонус проверки первого класса в случае, если значение атрибута заполнено пробелом (что может случиться с некоторыми приложениями, которые выводят class
атрибуты динамически).
Естественно, это также работает в jQuery, как продемонстрировано здесь .
Причина, по которой вам нужно объединить два селектора атрибутов какописано выше, потому что селектор атрибута, такой как [class*="status-"]
, будет соответствовать следующему элементу, который может быть нежелателен:
<div id='D' class='foo-class foo-status-bar bar-class'></div>
Если вы можете гарантировать, что такой сценарий никогда не произойдет,тогда вы можете использовать такой селектор ради простоты.Однако приведенная выше комбинация гораздо более надежна.
Если у вас есть контроль над источником HTML или приложением, генерирующим разметку, может быть проще сделать вместо префикса status-
свой собственный класс status
как предполагает Гамбо .