Hice una función que sobrescribe el: hover de algunos elementos en una página. Se desvanece entre el normal y el: efecto de desplazamiento. Para eso tuve que crear una clase .hover en mi archivo CSS. Creo que esto es un poco impuro. ¿Cómo podría leer el contenido de la pseudo clase hover?

3
meo 16 ago. 2009 a las 22:50

3 respuestas

Puede acceder a document.styleSheets y busque una regla que se aplique a ese elemento específico. Pero eso no es más limpio que usar una clase adicional simple.

3
Gumbo 16 ago. 2009 a las 19:33

Usar getComputedStyle como en la respuesta aceptada no funcionará, porque:

  1. El estilo calculado para el estado de desplazamiento solo está disponible cuando el elemento está realmente en ese estado.
  2. El segundo parámetro para getComputedStyle debe estar vacío o ser un pseudo-elemento. No funciona con :hover porque es una pseudoclase.

Aquí hay una solución alternativa:

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

10
bfavaretto 27 sep. 2012 a las 19:52

Si hay personas aquí que usan las respuestas de las preguntas aceptadas pero no funciona, aquí hay una buena función que podría:

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;
    }
}
0
Zach Saucier 11 jul. 2016 a las 18:45