2015-11-29 155 views
4

是否有任何CSS選擇器可以匹配這些元素? (我需要它的adblocker配置,看着W3C選擇器文件 - 沒有發現那裏的提示。通用解決方案需要,因爲部分後data-d-得到隨機的網站)。按屬性名稱匹配元素的CSS選擇器開始

<div data-d-9y3x> 
<div data-d-m01> 
<div data-d-whatever> 
+2

據我所知,*帶*號的比賽可能只對屬性值,而不是在屬性名開始。你很可能不得不在CSS中使用三個選擇器。 – Harry

回答

2

否,目前還沒有的方式來選擇基於其名稱是開始一定值的屬性的存在的元素。 開頭,選擇僅適用於屬性值。

這樣的選擇器在CSS Selectors Level 4 spec中也沒有提到,所以它看起來不會很快有效。

您有以下選擇:

  • 與格式element[attribute-name]所有可能的屬性名稱值選擇使用組。但是,當確切的屬性名稱不固定/未知時,此選項不可行。
  • 使用JavaScript(或您的偏好的其他一些腳本庫)。下面是一個非常快速的粗略樣本,爲未來的訪客帶來好處。

var el = document.getElementsByTagName('div'); 
 

 
for (var i = 0; i < el.length; i++) { 
 
    var attr = el[i].attributes; /* get all attributes on the element */ 
 
    for (var j = 0; j < attr.length; j++) { 
 
    if (attr[j].name.indexOf('data-') == 0) { /* if element has an attribute whose name has data- */ 
 
     el[i].style.color = 'red'; 
 
     break; 
 
    } 
 
    } 
 
}
<div data-d-9y3x>Some</div> 
 
<div data-d-m01>text</div> 
 
<div data-d-whatever>content</div> 
 
<div test-data-d-whatever>and</div> 
 
<div d-whatever>more</div> 
 
<div testdata-d-whatever>...</div>

+0

我希望CSS足夠靈活:)。我已經完成了一些JS + Greasemonkey的幫助。 – Max

+1

@Max:我剛剛添加了一個JS樣本。 – Harry

+1

歡呼聲。是的,在greasemonkey中做同樣的事情,讓它成爲未來讀者的答案。題外話:我在該網站上第5次調整了adblock :)他們似乎用更多更狡猾的技巧來調整他們的頁面,只是驚歎於用戶點擊廣告的這個「看不見的戰鬥」:)。乾杯,我不知道你可以在SO中添加工作代碼片段。 – Max