Это не выполнимо с 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
классом, как предлагает Gumbo .
status-
вы назвали, и вы не хотите соответствовать этому, селектор становится еще более сложным:div[class^="status-"]:not(.status-), div[class*=" status-"]:not(.status-)
плюс вы теряете поддержку IE7 / IE8. К счастью, если ваша разметка нормальная, вам не нужно исключать такой класс.