Read :hover Pseudo Class With Javascript
Solution 1:
Using getComputedStyle
as on the accepted answer won't work, because:
- The computed style for the hover state is only available when the element is actually on that state.
- The second parameter to
getComputedStyle
should be empty or a pseudo-element. It doesn't work with:hover
because it's a pseudo-class.
Here is an alternative solution:
functiongetCssPropertyForRule(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 consoleconsole.log(getCssPropertyForRule('div:hover', 'color'));
Solution 2:
You could access document.styleSheets
and look for a rule that is applied on that specific element. But that’s not any cleaner than using a simple additional class.
Solution 3:
UPDATE: I somehow got this wrong. The below example doesn't work. See @bfavaretto's comment for an explanation.
In Firefox, Opera and Chrome or any other browser that correctly implements window.getComputedStyle
is very simple. You just have to pass "hover" as the second argument:
<!DOCTYPE html><html><head><metacharset="UTF-8"><styletype="text/css">div {
display: block;
width: 200px;
height: 200px;
background: red;
}
div:hover {
background: green;
}
</style></head><body><div></div><scripttype="text/javascript">window.onload = function () {
var div = document.getElementsByTagName("div")[0];
var style = window.getComputedStyle(div, "hover");
alert(style.backgroundColor);
};
</script></body></html>
But I don't believe there's yet a solution for Internet Explorer, except for using So, having a document.styleSheets
as Gumbo suggested. But there will be differences..hover
class is the best solution so far. Not unclean at all.
Solution 4:
If there are any people here who use the questions accepted answer but it won't work, here's a nice function that might:
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;
}
}
Solution 5:
There is an alterantive way to get :hover
pseudo class with javascript. You can write your styles of hover
pseudo class in a content
property.
p::before,
p::after{
content: 'background-color: blue; color:blue; font-size: 14px;';
}
then read from it via getComputedStyle() method:
console.log(getComputedStyle(document.querySelector('p'),':before').getPropertyValue('content'));
Post a Comment for "Read :hover Pseudo Class With Javascript"