阅读:使用 javascript 悬停伪类

IT技术 javascript jquery css
2021-02-25 21:21:25

我做了一个覆盖页面上某些元素的 :hover 的函数。它在正常和 :hover 效果之间逐渐消失。那是因为我必须在我的 CSS 文件中创建一个 .hover 类。我觉得这有点不干净。我如何阅读 :hover 伪类内容?

5个回答

getComputedStyle在接受的答案上使用as 将不起作用,因为:

  1. 悬停状态的计算样式仅在元素实际处于该状态时可用。
  2. 第二个参数 togetComputedStyle应该是空的或伪元素。它不起作用,: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'));

演示

可疑地相同,但是这个答案的方法允许不是整个规则选择器的选择器。
2021-04-22 21:21:25
由于域限制,这不适用于其他域的样式表。所以这是部分解决方案
2021-05-08 21:21:25

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

从外部文件加载的样式表在 document.styleSheets 中不可用。
2021-04-29 21:21:25

更新:我不知何故弄错了。下面的例子不起作用。有关解释,请参阅@bfavaretto 的评论

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

<!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 还没有解决方案,除非document.styleSheets按照 Gumbo 的建议使用。但是会有差异。因此,到目前为止,.hover上课是最好的解决方案。一点也不脏。

这不起作用,因为getComputedStyle期望伪元素作为第二个参数,并且hover是伪类。如果您删除它,它将起作用,但只有在元素实际处于hover状态时运行时才会为您提供悬停值演示.
2021-04-15 21:21:25
@Ionut:这是一些浏览器不一致的一个很好的例子,不值得你花时间修复。如果有人使用劣质浏览器,他们仍然会得到一个可以工作的网站,只是不会有漂亮的小细节。
2021-04-21 21:21:25
@david,出于好奇,您将如何处理 IE 问题?
2021-04-23 21:21:25
@nickf,我完全同意这一点,但在某些情况下,客户迫切希望在她使用的浏览器 (IE6) 中具有相同的外观。我遇到了这样的问题。否则渐进增强是要走的路。
2021-04-27 21:21:25
谢谢!也许它不是不干净,但使用我的功能的人必须知道他必须做 .hover 类。避免这种情况就好了。
2021-05-13 21:21:25

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

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;
    }
}

有一种:hover使用 javascript获取伪类的替代方法您可以hovercontent属性中编写伪类的样式

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

然后通过getComputedStyle()方法读取它

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