javascript – 为什么getComputedStyle不能使用伪类,例如:hover?
作者:互联网
根据documentation,函数window.getComputedStyle应该能够获得计算的伪类样式,如:hover.
它也在another question作为答案解释
但正如最后一条评论在该问题中所说的那样,事实上它根本不起作用,它只返回正常的风格,而不是:悬停风格.你可以在this jsfiddle看到自己.警报返回红色,而不是绿色.
documentation on developer.mozilla.org也有一个例子,但这也不起作用 – 见here.
在2005年,回答者在评论中指出它根本不起作用,但没有给出解释.
可能是在函数返回正确的值之前必须完全呈现样式表吗?我试过设置一些延迟,但似乎没有任何工作.
我尝试过最新的Firefox,Chrome和IE浏览器.有人知道为什么这个功能没有按预期工作吗?
解决方法:
var style = window.getComputedStyle(element[, pseudoElt]);
其中pseudoElt是“指定要匹配的伪元素的字符串”.伪元素类似于:: before或:: after,这些元素是由CSS样式生成的. :hover,:visit或其他类似的效果是pseuodo-classes.它们不会创建新元素,而是将专门的类样式应用于元素.
获取伪类的计算样式是不可能的,至少不能使用getComputedStyle.然而,您可以遍历CSS规则并尝试找到合适的选择器,但我不建议您这样做,因为某些浏览器不会遵循DOM-Level-2-Style规则而您必须检查哪个规则会影响您的具体元素:
/* Style */
p a:hover{ color:yellow; background:black;}
p > a:hover{ color:green; background:white;}
p > a+a:hover{ color:fuchsia; background:blue;}
// JS
var i,j, sel = /a:hover/;
for(i = 0; i < document.styleSheets.length; ++i){
for(j = 0; j < document.styleSheets[i].cssRules.length; ++j){
if(sel.test(document.styleSheets[i].cssRules[j].selectorText)){
console.log(
document.styleSheets[i].cssRules[j].selectorText,
document.styleSheets[i].cssRules[j].style.cssText
);
}
}
}
Result: p a:hover color: yellow; background: none repeat scroll 0% 0% black; p > a:hover color: green; background: none repeat scroll 0% 0% white; p > a + a:hover color: fuchsia; background: none repeat scroll 0% 0% blue;
也可以看看:
> MDN:getComputedStyle
examples
> W3C:CSS2: 5.10 Pseudo-elements and pseudo-classes
> SO:Setting CSS pseudo-class rules from JavaScript
标签:javascript,css-selectors,dom 来源: https://codeday.me/bug/20190927/1823877.html