jquery 读取:使用javascript的hover伪类

1u4esq0p  于 2022-11-03  发布在  jQuery
关注(0)|答案(5)|浏览(108)

我做了一个覆盖页面上某些元素的:hover的函数。它在正常和:hover效果之间褪色。这是因为我必须在我的CSS文件中创建一个.hover类。我认为这有点不干净。我怎么能读到:hover伪类的内容呢?

wgxvkvu9

wgxvkvu91#

使用getComputedStyle作为已接受的答案将不起作用,因为:
1.悬停状态的计算样式仅在元素实际处于该状态时可用。

  1. getComputedStyle的第二个参数应该是空的或者是伪元素。它不适用于:hover,因为它是一个伪类。
    下面是一个替代解决方案:
function getCssPropertyForRule(rule, prop) {
    var sheets = document.styleSheets;
    var slen = sheets.length;
    for(var i=0; i<slen; i++) {
        var rules = document.styleSheets[i].cssRules;
        var rlen = rules.length;
        for(var j=0; j<rlen; j++) {
            if(rules[j].selectorText == rule) {
                return rules[j].style[prop];
            }
        }
    }
}

// Get the "color" value defined on a "div:hover" rule,
// and output it to the console
console.log(getCssPropertyForRule('div:hover', 'color'));

Demo

ajsxfq5m

ajsxfq5m2#

您可以访问document.styleSheets并查找应用于该特定元素的规则,但这并不比使用一个简单的附加类更简洁。

kuuvgm7e

kuuvgm7e3#

UPDATE:我不知怎么搞错了。下面的例子不起作用。请查看@bfavaretto的评论以获得解释。

在Firefox、Opera和Chrome或其他任何正确实现window.getComputedStyle的浏览器中,实现window.getComputedStyle非常简单,你只需要传递“hover”作为第二个参数:

<!DOCTYPE html>

<html>
<head>
<meta charset="UTF-8">
<style type="text/css">
div {
  display: block;
  width: 200px;
  height: 200px;
  background: red;
}
div:hover {
  background: green;
}
</style>
</head>
<body>

<div></div>

<script type="text/javascript">
window.onload = function () {
    var div = document.getElementsByTagName("div")[0];
    var style = window.getComputedStyle(div, "hover");
    alert(style.backgroundColor);
};
</script>
</body>
</html>

但是我不相信现在还有一个针对Internet Explorer的解决方案,除了像Gumbo建议的那样使用document.styleSheets。但是会有区别。所以,有一个.hover类是目前为止最好的解决方案。一点也不脏。

cczfrluj

cczfrluj4#

如果这里有人使用问题接受答案,但它不起作用,这里有一个很好的函数,可能:

function getPseudoStyle(id, style) {
    var all = document.getElementsByTagName("*");
    for (var i=0, max=all.length; i < max; i++) {
        var targetrule = "";
        if (all[i].id === id) {
            if(all[i].selectorText.toLowerCase()== id + ":" + style) { //example. find "a:hover" rule
                targetrule=myrules[i]
            }
        }
        return targetrule;
    }
}
jjhzyzn0

jjhzyzn05#

有一个替代的方法可以用javascript得到:hover伪类。你可以在content属性中写你的hover伪类的样式。

p::before,
p::after{
  content: 'background-color: blue; color:blue; font-size: 14px;';
}

然后通过getComputedStyle()方法从其中读取:

console.log(getComputedStyle(document.querySelector('p'),':before').getPropertyValue('content'));

相关问题