是否可以通过JavaScript从HTML节点中找到CSS规则?

Jim*_*ers 7 javascript css dom

我想在DOM中获取一个元素,然后查找我的CSS文件中的哪些规则有助于它的外观.类似于firebug或webkits检查员所做的事情.有没有办法在JavaScript中执行此操作?

更新:

我应该提供一个约束和一个特定的例子 - 我只对在基于webkit的浏览器中实现这一点感兴趣,因此跨浏览器的困难不是一个问题.我特别想要实现的是这个.假设我有一个样式表如下:

     div {
        background: #f0f0f0;
     }

     .example {
        padding: 10px;
     }
Run Code Online (Sandbox Code Playgroud)

然后让我们说一些像这样的HTML代码:

  <div id="test" class="example">
     <hgroup>
        <h1>Test</h1>
        <h2>A sample file to play with.</h2>
     </hgroup>
     <ul class="sample">
        <li id="item_1">Item 1</li>
        <li id="item_2">Item 2</li>
     </ul>
  </div>
Run Code Online (Sandbox Code Playgroud)

那么在javascript中我希望能够有一个函数可以从CSS中找到构造对象的选择器:

get_selectors_for(document.getElementById('test'))
// should return:
// ['div','.example']
Run Code Online (Sandbox Code Playgroud)

知道我们只需要担心webkit而不是所有浏览器,反向查询选择器有多复杂?

Hem*_*ock 12

这就是你想要的.仅限WebKit.我通过查看chrome web检查器源找到了getMatchedCSSRules.

  function getAppliedSelectors(node) {
    var selectors = [];
    var rules = node.ownerDocument.defaultView.getMatchedCSSRules(node, '');

    var i = rules.length;
    while (i--) {
      selectors.push(rules[i].selectorText);
    }
    return selectors;
  }
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这仅适用于从与HTML相同的服务器发送的样式表中的规则.这是设计的 (4认同)

Gun*_*ven 6

我已经取得了巨大成功的跨浏览器解决方案是http://www.brothercake.com/site/resources/scripts/cssutilities/

它非常强大和准确,比上面提到的仅限webkit的函数获得了更多的信息,它适用于所有样式(包括那些跨站点且不活动或已被覆盖的样式).