Это не выполнимо с 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. К счастью, если ваша разметка нормальная, вам не нужно исключать такой класс.[class*=" anim-overlay-"] a:hover:after{...}
. Мои классы CSSanim-overlay-1
,anim-overlay-2
.....anim-overlay-8
.anim-overlay-*{...}
?Селекторы атрибутов CSS позволят вам проверить атрибуты для строки. (в данном случае - имя класса)
https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors
(похоже, что он на самом деле находится в состоянии «рекомендации» для 2.1 и 3)
Вот схема того, как я * думаю, что это работает:
[ ]
: это контейнер для сложных селекторов, если вы ...class
: 'class' - это атрибут, который вы смотрите в этом случае.*
: модификатор (если есть): в этом случае - «подстановочный знак» означает, что вы ищете ЛЮБОЕ совпадение.test-
: значение (при условии, что оно есть) атрибута, содержащего строку «test-» (может быть любым)Так, например:
Вы можете быть более конкретным, если у вас есть веская причина, с элементом тоже
ul[class*='test-'] > li { ... }
Я пытался найти крайние случаи, но я не вижу необходимости использовать комбинацию
^
и*
- как * получает все ...пример: http://codepen.io/sheriffderek/pen/MaaBwp
http://caniuse.com/#feat=css-sel2
Все, что выше IE6, будет счастливым. :)
Обратите внимание, что:
[class] { ... }
Выберу что-нибудь с классом ...
источник
[class*='test-']
будет соответствовать таким элементам, как<div class='foo-test-bar'>
. Это один крайний случай, который требует объединения ^ и *, как описано в моем ответе. И IE6 не поддерживает селекторы атрибутов.Это невозможно с CSS-селекторами. Но вы можете использовать два класса вместо одного, например, статус и важный вместо статуса важный .
источник
Вы не можете сделать это, нет. Есть один селектор атрибута, который соответствует точно или частично до знака -, но здесь он не будет работать, потому что у вас есть несколько атрибутов. Если имя класса, которое вы ищете, всегда будет первым, вы можете сделать это:
Обратите внимание, что это просто для того, чтобы указать, какой селектор атрибута CSS является самым близким, не рекомендуется предполагать, что имена классов всегда будут впереди, так как javascript может манипулировать атрибутом.
источник