Obter Elemento StyleSheet Estilo em JavaScript
-
23-08-2019 - |
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.
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.