如何使用jQuery獲取給定DOM元素的所有DEFINED CSS選擇器?如何獲得給定DOM元素的所有定義的CSS選擇器?
定義的意思是指應用於document
的任何樣式表中使用的所有CSS選擇器。
從某種意義上說,這與FireBug實現的功能類似,其中顯示了所選DOM元素的所有應用CSS選擇器。
任何幫助表示讚賞。
如何使用jQuery獲取給定DOM元素的所有DEFINED CSS選擇器?如何獲得給定DOM元素的所有定義的CSS選擇器?
定義的意思是指應用於document
的任何樣式表中使用的所有CSS選擇器。
從某種意義上說,這與FireBug實現的功能類似,其中顯示了所選DOM元素的所有應用CSS選擇器。
任何幫助表示讚賞。
從這個answer你可能可以通過循環瀏覽cssRules屬性來獲得你正在尋找的東西。
var myElement = $("#content");
for (var x = 0; x < document.styleSheets.length; x++) {
var rules = document.styleSheets[x].cssRules;
for (var i = 0; i < rules.length; i++) {
if (myElement.is(rules[i].selectorText)) {
$("ul").append("<li>" + rules[i].selectorText + "</li>");
}
}
}
鑑於以下DOM:
<div>
<div id="content">
</div>
</div>
和CSS規則:
div
{
background-color:black;
}
#content{
height:50px;
width:50px;
}
div > div
{
border: solid 1px red;
}
我們會得到一個匹配的規則集:
body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, form,fieldset, input, textarea, p,
blockquote, th, td div
#content
div > div
例如在jsfiddle。不知道這將適用於所有情況的效果如何,但可能需要考慮是否符合您的需求。
更新一個稍微更完整example ...
$(document).click(function(event) {
var rules = GetAppliedCssRules($(event.target));
var $ul = $("#rules").empty();
$.each(rules, function() {
$ul.append("<li>" + this + "</li>");
});
event.preventDefault();
});
function GetAppliedCssRules($element) {
var appliedRules = [];
for (var x = 0; x < document.styleSheets.length; x++) {
var rules = document.styleSheets[x].cssRules;
for (var i = 0; i < rules.length; i++) {
if ($element.is(rules[i].selectorText)) {
appliedRules.push(rules[i].selectorText);
}
}
}
return appliedRules;
}
這是否按照像FireBug那樣在DOM中應用的優先級順序返回appliedRules? – GeekTantra 2011-02-28 12:07:19
這不會給你規則應用的優先級,只是樣式表中給定的規則與你的元素匹配。如果你想找出元素的最終樣式,你可以使用'getComputedStyle' – 2011-02-28 12:49:08
@Mark,你知道如何通過css優先級來排序選擇器嗎?我看到firebug lite按css優先順序排列,但我不知道他們是如何做到的。 – Codler 2013-02-11 21:40:30
我覺得這兩個功能並不相似。此外,我認爲jQuery和瀏覽器都不會保留通過javascript代碼或樣式表文件使用的選擇器的跟蹤;選擇器用於引用一個或多個DOM元素,最終將樣式應用於它們。
所以,它保留的是樣式,而不是使用過的選擇器。
希望這會有所幫助。
這聽起來更合理......不知道它是否使用JS/jQuery的孤獨,雖然是可能的。 – BoltClock 2011-02-27 20:20:38
[你的其他問題](http://stackoverflow.com/questions/5135287)?它仍然有用嗎? – Gumbo 2011-02-27 20:25:01
聽起來好像你正在試圖找到元素的計算樣式,而不是它的「定義選擇器」。 – 2011-02-27 22:15:41