Es ist nicht machbar mit CSS2.1, aber es ist möglich , mit CSS3 Attributstring-matching Selektoren (das ist in IE7 + unterstützt):
div[class^="status-"], div[class*=" status-"]
Beachten Sie das Leerzeichen in der zweiten Attributauswahl. Dies nimmt div
Elemente auf, deren class
Attribut eine der folgenden Bedingungen erfüllt:
[class^="status-"]
- beginnt mit "status-"
[class*=" status-"]
- enthält die Teilzeichenfolge "status-", die direkt nach einem Leerzeichen steht. Klassennamen werden gemäß der HTML-Spezifikation durch Leerzeichen getrennt , daher das signifikante Leerzeichen. Dies überprüft alle anderen Klassen nach der ersten, wenn mehrere Klassen angegeben sind, und fügt einen Bonus hinzu, wenn die erste Klasse überprüft wird, falls der Attributwert mit Leerzeichen aufgefüllt ist (was bei einigen Anwendungen vorkommen kann, die class
Attribute dynamisch ausgeben ).
Dies funktioniert natürlich auch in jQuery, wie hier gezeigt .
Der Grund, warum Sie zwei Attributselektoren wie oben beschrieben kombinieren müssen, liegt darin, dass ein Attributselektor wie [class*="status-"]
der mit dem folgenden Element übereinstimmt, was unerwünscht sein kann:
<div id='D' class='foo-class foo-status-bar bar-class'></div>
Wenn Sie sicherstellen können, dass ein solches Szenario niemals eintritt, können Sie der Einfachheit halber einen solchen Selektor verwenden. Die obige Kombination ist jedoch viel robuster.
Wenn Sie die Kontrolle über die HTML-Quelle oder die Anwendung haben, die das Markup generiert, ist es möglicherweise einfacher, das status-
Präfix status
stattdessen zu einer eigenen Klasse zu machen, wie Gumbo vorschlägt .
status-
und diese nicht anpassen möchten, wird die Auswahl noch komplizierter:div[class^="status-"]:not(.status-), div[class*=" status-"]:not(.status-)
Außerdem verlieren Sie die IE7 / IE8-Unterstützung. Zum Glück müssen Sie eine solche Klasse nicht ausschließen, wenn Ihr Markup vernünftig ist.