2013-02-02 5 views
5

Man könnte einen CSS-Selektor wie a[href^="http:"], a[href^="mailto:"] verwenden, um alle externen und Mail-Links innerhalb eines Dokuments zu vergleichen, aber gibt es eine Möglichkeit, eine "oder" -Anweisung im Anführungszeichen des Selektors zu verwenden: a[href^="(http|mailto):"]?OR-Anweisung in CSS-Selektor

+1

Der erste Selektor Sie erwähnt wird tun, was Sie wollen ... – sevenseacat

+0

@sevenseacat: Ist nicht das, was er sagte? – BoltClock

Antwort

5

Soweit ich sagen kann, gibt es keine Möglichkeit zu tun, was Sie fragen. In der CSS-Selektor-Spezifikation wird das Pipe-Zeichen für etwas anderes verwendet, wenn es mit Attributselektoren verwendet wird. Es wird als Namespace-Trennzeichen verwendet.

Pro die Wähler spec auf der W3C:

Der Attributname in einem Attributselektor als CSS qualifizierte Namen gegeben: ein Namespacepräfix der zuvor erklärt wurde, kann mit dem Attributnamen vorangestellt werden getrennt durch den Namensraum Trennzeichen "vertikale Leiste" (|). In Übereinstimmung mit den Namespaces in der XML-Empfehlung gelten die Standardnamespaces nicht für Attribute , daher gelten Attributselektoren ohne Namespace-Komponente nur für Attribute, die keinen Namespace haben (äquivalent zu "| attr"; diese Attribute werden genannt) in der "pro-Element-Typ Namespace Partition"). Ein Sternchen kann für das Namespace-Präfix verwendet werden, das angibt, dass der Selektor alle Attributnamen ohne in Bezug auf den Namespace des Attributs abgleichen soll.

CSS examples: 

@namespace foo "http://www.example.com"; 
[foo|att=val] { color: blue } 
[*|att] { color: yellow } 
[|att] { color: green } 
[att] { color: green } 

Die erste Regel wird mit dem Attribut att im „http://www.example.com“ Namespace mit dem Wert „val“ nur Elemente entsprechen.

Die zweite Regel passt nur Elemente mit dem Attribut att unabhängig vom Namespace des Attributs (einschließlich kein Namespace).

Die letzten beiden Regeln sind äquivalent und entsprechen nur Elementen mit dem Attribut att, in dem sich das Attribut nicht in einem Namespace befindet.

Quelle: http://www.w3.org/TR/selectors/#attrnmsp

+0

Es gibt auch ['[att | = val]'] (http: //www.w3.org/TR/selectors/# attribute-Darstellung), ein Attributselektor, der nach Attribut mit entweder genau "val" oder einem Wert mit dem Präfix "val-" übereinstimmt, aber wie bei Namespace-Präfixen bietet er nicht die geforderte Funktionalität. – BoltClock

0

ich die CSS-Selektoren Grammatik war die Überprüfung, scheint aber wie der einzige Weg, dies ist mit dem Kommaseparator zu tun:

selectors_group 
    : selector [ COMMA S* selector ]* 

Auch dies sind einige relevante lexikalische Regeln:

{w}"+"   return PLUS; 
{w}">"   return GREATER; 
{w}","   return COMMA; 
{w}"~"   return TILDE; 

Es gibt nicht UND noch OR Regeln, aber eine Sache, die ich bemerkt, ist, dass sie Negation haben:

"{N}{O}{T}"(" return NOT;) 

http://www.w3.org/TR/selectors/#w3cselgrammar

+0

Die Symbole sind Kombinatoren (außer die ','). Diese Negation bezieht sich einfach auf die Pseudo-Klasse ': not()', also ist es nichts Besonderes. – BoltClock

+0

@BoltClock: Ich weiß, ist nichts besonderes, ich erwähnte nur ein paar Dinge (relevant für mich) Ich fand auf der CSS-Selektor-Spezifikation. Soll ich meine Antwort entfernen? –