Nie da się tego zrobić w CSS2.1, ale jest to możliwe dzięki selektorom dopasowania podciągów atrybutów CSS3 (które są obsługiwane w IE7 +):
div[class^="status-"], div[class*=" status-"]
Zwróć uwagę na spację w drugim selektorze atrybutu. Spowoduje to pobranie div
elementów, których class
atrybut spełnia jeden z następujących warunków:
[class^="status-"]
- zaczyna się od „status-”
[class*=" status-"]
- zawiera podciąg „status-” występujący bezpośrednio po znaku spacji. Nazwy klas są oddzielane spacjami zgodnie ze specyfikacją HTML , stąd znaczący znak spacji. To sprawdza wszystkie inne klasy po pierwszej, jeśli określono wiele klas, i dodaje premię polegającą na sprawdzeniu pierwszej klasy w przypadku, gdy wartość atrybutu jest dopełniona spacjami (co może się zdarzyć w przypadku niektórych aplikacji, które generują class
atrybuty dynamicznie).
Oczywiście działa to również w jQuery, jak pokazano tutaj .
Powodem, dla którego musisz połączyć dwa selektory atrybutów, jak opisano powyżej, jest to, że selektor atrybutu, taki jak, [class*="status-"]
będzie pasował do następującego elementu, co może być niepożądane:
<div id='D' class='foo-class foo-status-bar bar-class'></div>
Jeśli możesz zapewnić, że taki scenariusz nigdy się nie wydarzy, możesz skorzystać z takiego selektora ze względu na prostotę. Jednak powyższa kombinacja jest znacznie bardziej niezawodna.
Jeśli masz kontrolę nad źródłem HTML lub aplikacją generującą znaczniki, prościej może być po prostu uczynić status-
prefiks własną status
klasą zamiast, jak sugeruje Gumbo .
status-
i nie chcesz jej dopasowywać, selektor staje się jeszcze bardziej skomplikowany: dodatkowodiv[class^="status-"]:not(.status-), div[class*=" status-"]:not(.status-)
tracisz obsługę IE7 / IE8. Na szczęście, jeśli Twój znacznik jest rozsądny, nie będziesz musiał wykluczać takiej klasy.