Це не здійснимо з CSS2.1, але можна з атрибутом CSS3 подстрока зіставлення селектор (які будуть підтримуватися в IE7 +):
div[class^="status-"], div[class*=" status-"]
Помітьте пробільний символ у другому селекторі атрибутів. Тут вибираються div
елементи, class
атрибут яких відповідає будь-якій з цих умов:
[class^="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. На щастя, якщо ваша розмітка є здоровою, вам не потрібно буде виключати такий клас.