【问题标题】:How to access the focus/hover/visited CSS properties of an element through Javascript?如何通过Javascript访问元素的焦点/悬停/访问的CSS属性?
【发布时间】:2018-02-02 21:53:25
【问题描述】:

我现在可能很累并且想得很奇怪,但我根本找不到如何检索在元素的焦点、悬停或访问状态中定义的 CSS 属性的值。目标是使用 Javascript 中的值。

重要提示:我不需要获取焦点/悬停/访问的元素。我想使用 为以下状态定义的 CSS 属性访问 DOM 中的某些 任何元素的值:focus:hover:visited

这些伪类在这种情况下似乎没有帮助,所以我是否需要触发相应的状态才能访问这些值?

应该比这更简单...不是吗?

P.S.:用素食 Javascript 或 jQuery 回答即可。

【问题讨论】:

  • 您可能必须解析样式表本身才能获得这些值。你最终想要完成什么?可能有更好的方法可以采用。
  • 谢谢@Blazemonger,我害怕“通过怪物”的可能性......我的目标是将某些这些值放入Javascript,以便在相同或其他元素中重用它们,a基本示例是在触发某些事件后反转元素状态的颜色。
  • 可能还有其他方法可以做到这一点。要么使用可以使用 JavaScript 轻松添加或删除的实用程序类,要么查找 CSS custom properties
  • "素食 Javascript 或 jQuery 的答案都可以。"纯素 JavaScript 怎么样? (免责声明:实际上不是素食主义者。)

标签: javascript jquery css css-selectors pseudo-class


【解决方案1】:

是的,您可以通过阅读样式表来实现这一点。 您可以使用 document.styleSheets 获取它;下面是示例和jsfiddle链接。

http://jsfiddle.net/wt3qQ/

出于安全原因,Opera 和 Mozilla 不允许您访问 来自另一个域的样式表的 cssRules 集合或 协议。尝试访问它会引发安全违规 错误

function getStyleBySelector( selector )
   {
       var sheetList = document.styleSheets;
       var ruleList;
       var i, j;

       /* look through stylesheets in reverse order that
          they appear in the document */
       for (i=sheetList.length-1; i >= 0; i--)
       {
           ruleList = sheetList[i].cssRules;
           for (j=0; j<ruleList.length; j++)
           {
               if (ruleList[j].type == CSSRule.STYLE_RULE && 
                   ruleList[j].selectorText == selector)
               {
                   return ruleList[j].style;
               }   
           }
       }
       return null;
   }

console.log(getStyleBySelector('a:hover').color);
console.log(getStyleBySelector('#link:hover').color);

【讨论】:

  • 这确实是一个不错的尝试,它符合 Blazemonger 的建议(解析样式表)。我原以为它会更复杂,尽管它在性能上看起来仍然有点沉重。谢谢阿米特。
猜你喜欢
  • 2011-10-31
  • 2012-03-10
  • 1970-01-01
  • 2017-05-17
  • 2011-01-16
  • 1970-01-01
  • 1970-01-01
  • 2011-08-27
  • 2013-07-15
相关资源
最近更新 更多