Me gustaría devolver una cadena con todo el contenido de una regla CSS, como el formato que vería en un estilo en línea. Me gustaría poder hacer esto sin saber qué contiene una regla en particular, por lo que no puedo simplemente sacarlos por nombre de estilo (como, .style.width
etc.)
El CSS:
.test {
width:80px;
height:50px;
background-color:#808080;
}
El código hasta ahora:
function getStyle(className) {
var classes = document.styleSheets[0].rules || document.styleSheets[0].cssRules
for(var x=0;x<classes.length;x++) {
if(classes[x].selectorText==className) {
//this is where I can collect the style information, but how?
}
}
}
getStyle('.test')
javascript
html
css
Diodeus - James MacFarlane
fuente
fuente
Respuestas:
Adaptado de aquí , basándose en la respuesta de scunliffe:
fuente
var classes
debería estardocument.styleSheets[0].rules[0].cssRules
en Chrome. Esto podría agregarse (creativamente) a la calza en la respuesta.Dado que la respuesta aceptada de "nsdel" solo está disponible con una hoja de estilo en un documento, esta es la solución de trabajo completa adaptada:
Aviso: el selector debe ser el mismo que en el CSS.
fuente
global_
No es solo un alias para el objeto de ventana. Edité el fragmento de código. Debería funcionar ahoraSOLUCIÓN 1 (CROSS-BROWSER)
SOLUCIÓN 2 (CROSS-BROWSER)
fuente
Algunas diferencias de navegador a tener en cuenta:
Dado el CSS:
y dado el ejemplo de InsDel, las clases tendrán 2 clases en FF y 3 clases en IE7 .
Mi ejemplo ilustra esto:
fuente
Aquí hay un código para iterar a través de todas las reglas en una página:
fuente
Nota: "menú" es un ID de elemento al que ha aplicado CSS. "className" un nombre de clase css que necesitamos para obtener su texto.
fuente
item
método toma un índice entero, no un className).No he encontrado ninguna de las sugerencias que realmente funcione. Aquí hay uno más robusto que normaliza el espaciado al encontrar clases.
Aquí está en acción desde la consola de Chrome.
fuente
Hice una función auxiliar similar que muestra los estilos innecesarios para esta página. agrega un
<div>
al cuerpo enumerando todos los estilos que no se usaron.(para usar con la consola Firebug)
fuente
Haber adaptado la respuesta de julmot para obtener un resultado más completo. Este método también devolverá estilos donde la clase es parte del selector.
Además, he creado una función que recopila las definiciones de estilo css en el subárbol de un nodo raíz que usted proporciona (a través de un selector de jquery).
Tenga en cuenta que si una clase se define varias veces con el mismo selector, la función anterior solo recogerá la primera. Tenga en cuenta que el ejemplo usa jQuery (pero cab se reescribe con relativa facilidad para no usarlo)
fuente
// funciona en IE, no estoy seguro de otros navegadores ...
fuente
Esta versión pasará por todas las hojas de estilo de una página. Para mis necesidades, los estilos solían estar entre la segunda y la última de las más de 20 hojas de estilo, así que las reviso al revés.
fuente
Agregué el retorno del objeto donde los atributos se analizan con estilo / valores:
fuente
style.cssText.match(...).1
es nulo o no es un objetoUncaught ReferenceError: classStyleTxt is not defined
Creé una versión que busca en todas las hojas de estilo y devuelve coincidencias como un objeto clave / valor. También puede especificar startsWith para que coincida con los estilos secundarios.
devoluciones:
de:
El código:
Estoy usando esto en producción como parte del proyecto de forma pura . Espero eso ayude.
fuente
Me enfrenté al mismo problema. Y con la ayuda de muchachos, se me ocurrió una solución realmente inteligente que resuelve ese problema por completo (se ejecuta en Chrome).
Extrae todas las imágenes de la red
fuente
En una línea, imprime el CSS generado para cualquier consulta.
fuente
Según la respuesta de @dude, esto debería devolver estilos relevantes en un objeto, por ejemplo:
Esto devolverá:
Código:
fuente
_.pickBy(classes[x].style, (k,v) => isNaN(parseInt(k)) && typeof(v) == 'string' && v && v != 'initial' && k != 'cssText' )