根据documentation,函数window.getComputedStyle
应该能够获得计算的伪类样式,如:hover。
但正如最后一条评论在该问题中所说的那样,事实上它根本不起作用,它只返回正常的风格,而不是:悬停风格。你可以在this jsfiddle中看到自己。警报返回红色,而不是绿色。
documentation on developer.mozilla.org也有一个示例,但这也不起作用 - 请参阅here。
在this question中,回答者在评论中指出它根本不起作用,但没有给出解释。
在函数返回正确的值之前,是否必须完全呈现样式表?我试过设置一些延迟,但似乎没有任何工作。
我尝试过最新的Firefox,Chrome和IE浏览器。有人知道为什么这个功能没有按预期工作吗?
答案 0 :(得分:13)
var style = window.getComputedStyle(element[, pseudoElt]);
其中pseudoElt
是"一个字符串,指定要匹配" 的伪元素。伪元素类似于::before
或::after
,它们是由CSS样式生成的元素。 :hover
,:visited
或其他类似效果是pseuodo- 类。他们不会创建新元素,但会对元素应用专门的类样式。
无法获得伪类的计算样式,至少不能使用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;
另见:
答案 1 :(得分:0)
请注意,至少对于启用了远程调试端口的Chrome,有一种方法可以执行此操作。基本上你需要使用WebSocket,连接到远程调试器url,然后发出以下命令:
TStringList
然后您可以使用常规的getComputedStyle或CSS.getComputedStyleForNode调试器API。