Pregunta

He estado usando la función getStyle de John Resig desde Pro Técnicas de JavaScript para obtener el estilo de los elementos:

function getStyle(elem, name) {
    // J/S Pro Techniques p136
    if (elem.style[name]) {
        return elem.style[name];
    } else if (elem.currentStyle) {
        return elem.currentStyle[name];
    }
    else if (document.defaultView && document.defaultView.getComputedStyle) {
        name = name.replace(/([A-Z])/g, "-$1");
        name = name.toLowerCase();
        s = document.defaultView.getComputedStyle(elem, "");
        return s && s.getPropertyValue(name);
    } else {
        return null;
    }
}

Sin embargo, este método devuelve estilos predeterminados para un elemento si no se especifica ningún estilo:

http://johnboxall.github.com/test/getStyle.html

texto alternativo http://img.skitch.com/20081227-8qhxie51py21yxuq7scy32635a.png

¿Es posible conseguir estilos sólo el estilo especificada de un elemento (y devolver null si el estilo no está definido)?

Actualización:

¿Por qué necesito una bestia? Estoy construyendo un pequeño componente que permite a los usuarios elementos de estilo. Uno de los estilos que se pueden aplicar es text-align - left, center, right - Uso getStyle elementos sin estilo por defecto a center. Esto hace que sea imposible saber si el elemento está centrada ya que el usuario quería que se centra o se centra porque ese es el estilo por defecto.

¿Fue útil?

Solución

  

¿Es posible obtener sólo el   estilos de hojas de estilo especificada de una   elemento (y devolver null si el estilo   no está definido)?

Esto es efectivamente lo que se hace por la rutina se presente. El problema es, en la mayoría de los escenarios, la mayoría de los estilos son no indefinido - son heredadas y / o definidas por hoja de estilo interna del navegador individual.

Se podría, con una gran cantidad de esfuerzo, iterar a través de todos de las reglas que definen el estilo en cuestión, en todos de las hojas de estilo en la vista actual de la documento, evaluarlas para el elemento en cuestión, y si ninguna aplica ... y si no aplica a un padre (o este estilo particular, no se hereda) ... entonces considera indefinido. Esto sería lento, y muy propenso a errores. No recomendaría intentarlo.

Tal vez sería mejor dar un paso atrás y preguntarse por qué lo que usted necesita tal cosa?

Otros consejos

Tal vez su componente puede envolver los estilos que controla? Entonces, cuando un estilo se establece a través del componente componente sabe lo que el usuario desea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top