如何获取给定DOM元素的所有定义的CSS选择器?

Gee*_*tra 9 javascript jquery css-selectors

如何使用jQuery获取给定DOM元素的所有DEFINED CSS选择器?

定义中我指的是应用于任何样式表的所有CSS选择器document.

在某种程度上,这类似于FireBug实现的功能,其中显示了所选DOM元素的所有应用CSS选择器.

任何帮助表示赞赏.

Mar*_*man 7

从这个答案中,您可以通过循环遍历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>");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

鉴于以下dom:

<div>
    <div id="content">
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

和css规则:

div
{
    background-color:black;
}
#content{
    height:50px;
    width:50px;
}
div > div
{
    border: solid 1px red;
}
Run Code Online (Sandbox Code Playgroud)

我们将得到一个匹配的规则集:

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
Run Code Online (Sandbox Code Playgroud)

关于jsfiddle的例子.不确定这对于所有场景的效果如何,但如果它符合您的需求,可能需要考虑一下.

更新了稍微更完整的示例 ......

$(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;
}
Run Code Online (Sandbox Code Playgroud)