2013-02-02 93 views
5

有人可能會使用一個CSS選擇器如a[href^="http:"], a[href^="mailto:"]匹配文檔中的所有外部和郵件鏈接,但有使用像這樣選擇的報價段內的一個「或」聲明的方式: a[href^="(http|mailto):"]或聲明

+1

你提到的第一個選擇將你想要做什麼... – sevenseacat

+0

@sevenseacat:這不就是他說? – BoltClock

回答

5

據我所知,有沒有辦法做到你的要求。在CSS選擇器規範中,管道字符用於與屬性選擇器一起使用時有所不同。它用作名稱空間分隔符。

每對W3C選擇規格:

在屬性選擇屬性名稱是作爲一個CSS 限定名:先前已宣佈 可以被前置到屬性名稱的命名空間前綴由名稱空間 分隔符「垂直條」(|)分隔。爲了與 XML建議中的名稱空間保持一致,默認名稱空間不適用於屬性 因此,沒有名稱空間組件的屬性選擇器僅將 應用於沒有名稱空間的屬性(相當於「| attr」;這些屬性被稱爲 位於「每個元素類型名稱空間 分區」)。星號可用於指示選擇是不 關於屬性的名稱空間匹配的所有屬性名稱的命名空間前綴 。

CSS examples: 

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

的第一條規則將匹配僅與具有值「VAL」的 「http://www.example.com」命名空間屬性ATT元件。

第二條規則將匹配只與ATT 屬性不論屬性(包括沒有命名空間)的命名空間的元素。

最後兩個規則是等價的,只會匹配與 屬性ATT其中屬性是不是在一個命名空間的元素。

來源:http://www.w3.org/TR/selectors/#attrnmsp

+0

還有['[att | = val]'](http://www.w3。org/TR/selectors /#attribute-representation),一個屬性選擇器,它與屬性匹配,或者完全是'val'或者是一個以'val-'爲前綴的值,但是與名稱空間前綴一樣,它不提供被請求的功能。 – BoltClock

0

我檢查CSS選擇器語法,但似乎這樣做是逗號分隔的唯一途徑:

selectors_group 
    : selector [ COMMA S* selector ]* 

而且,這些都是一些相關詞彙規則:

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

有沒有也不OR規則,但有一兩件事我注意到的是,他們有否定:

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

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

+0

符號是組合符(除''''外)。否定只是指':not()'僞類,所以它沒有什麼特別之處。 – BoltClock

+0

@BoltClock:我知道沒有什麼特別之處,我只是提到了一些我在css選擇器規範中找到的東西(相關的對象)。我應該刪除我的答案嗎? –