Pergunta

Eu tenho usado função getStyle de John Resig de Técnicas Pro JavaScript para obter o estilo de 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;
    }
}

No entanto, isto estilos padrão método retorna para um elemento se nenhum estilo é especificada:

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

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

É possível obter apenas a folha de estilo especificado estilos de um elemento (e return null se o estilo é indefinido)?

Update:

Por que preciso de tal uma besta? Estou construindo um pequeno componente que permite aos usuários elementos de estilo. Um dos estilos que podem ser aplicados é text-align - left, center, right - Usando getStyle elementos sem estilo padrão para center. Isso torna impossível dizer se o elemento é centralizado porque o usuário queria que fosse centrado ou está centrada porque esse é o estilo padrão.

Foi útil?

Solução

É possível obter apenas o stylesheet estilos de um especificado elemento (e return null se o estilo é indefinido)?

Isso é efetivamente o que é feito pela rotina você apresenta. O problema é, na maioria dos cenários, a maioria dos estilos são não indefinido - eles são herdadas e / ou definidas por folha de estilo interna do navegador da individual.

Você poderia, com um monte de esforço, iterate através de todas das regras que definem o estilo em questão, no todas de folhas de estilo na visualização atual do documento, avaliá-los para o elemento em questão, e se nenhum aplicado ... e se nenhum aplicada a um pai (ou este estilo particular não é herdada) ... então considerá-lo indefinido. Isso seria lento, e incrivelmente propenso a erros. Eu não recomendo tentar isso.

Talvez você faria melhor passo para trás e perguntar por que você nunca iria precisar de um tal coisa?

Outras dicas

Talvez o seu componente pode embrulhar os estilos que controla? Então, quando um estilo é definido através do componente a componente sabe o que o usuário quer.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top