É fácil definir valores CSS embutidos com javascript. Se eu quiser mudar a largura e tiver um html assim:
<div style="width: 10px"></div>
Tudo que eu preciso fazer é:
document.getElementById('id').style.width = value;
Isso mudará os valores da folha de estilo embutida. Normalmente, isso não é um problema, porque o estilo embutido substitui a folha de estilo. Exemplo:
<style>
#tId {
width: 50%;
}
</style>
<div id="tId"></div>
Usando este Javascript:
document.getElementById('tId').style.width = "30%";
Eu obtenho o seguinte:
<style>
#tId {
width: 50%;
}
</style>
<div id="tId" style="width: 30%";></div>
Isso é um problema, porque não só não quero alterar os valores embutidos, Se eu olhar para a largura antes de defini-la, quando tenho:
<div id="tId"></div>
O valor retornado é Nulo, então se eu tenho Javascript que precisa saber a largura de algo para fazer alguma lógica (eu aumento a largura em 1%, não para um valor específico), voltando Nulo quando espero a string "50% "realmente não funciona.
Portanto, minha pergunta: eu tenho valores em um estilo CSS que não estão localizados inline, como posso obter esses valores? Como posso modificar o estilo em vez dos valores embutidos, dado um id?
Respostas:
Ok, parece que você deseja alterar o CSS global para que altere de forma eficaz todos os elementos de um estilo particular de uma vez. Recentemente, aprendi como fazer isso sozinho com um tutorial de Shawn Olson . Você pode consultar seu código diretamente aqui .
Aqui está o resumo:
Você pode recuperar as folhas de estilo via
document.styleSheets
. Na verdade, isso retornará uma matriz de todas as folhas de estilo em sua página, mas você pode dizer em qual delas está por meio dadocument.styleSheets[styleIndex].href
propriedade. Depois de encontrar a folha de estilo que deseja editar, você precisa obter o conjunto de regras. Isso é chamado de "regras" no IE e "cssRules" na maioria dos outros navegadores. A maneira de saber em qual CSSRule você está é pelaselectorText
propriedade. O código de trabalho é mais ou menos assim:Deixe-me saber como isso funciona para você e, por favor, comente se encontrar algum erro.
fonte
rule.value
em FF 20. Hárule.style
, no entanto, que é configurável e se comporta comoelement.style
. Cf. https://developer.mozilla.org/en-US/docs/DOM/CSSStyleRule . Verificarrule.type == rule.STYLE_RULE
também pode ser uma boa ideia antes de acessarrule.selectorText
.document.styleSheets[styleIndex].cssRules.[ruleIndex].style = {'color':'red', 'background-color':'green'};
funcionou para mim, obrigado!Por favor! Basta perguntar a w3 ( http://www.quirksmode.org/dom/w3c_css.html )! Ou, na verdade, demorei cinco horas ... mas aqui está!
A função é realmente fácil de usar .. exemplo:
Ah ..
EDITAR: como @ user21820 descreveu em sua resposta, pode ser um pouco desnecessário alterar todas as folhas de estilo na página. O script a seguir funciona com IE5.5, bem como com o Google Chrome mais recente, e adiciona apenas a função css () descrita acima.
fonte
Reunindo o código nas respostas, escrevi esta função que parece funcionar bem no meu FF 25.
Esta é uma forma de colocar valores no css que serão usados no JS mesmo que não sejam compreendidos pelo navegador. por exemplo, maxHeight para um tbody em uma tabela rolada.
Ligar :
CCSStylesheetRuleStyle('default', "#mydiv", "height");
CCSStylesheetRuleStyle('default', "#mydiv", "color", "#EEE");
fonte
document.styleSheets[m].href
será nulo e falhará.Não sei por que as outras soluções percorrem toda a lista de folhas de estilo do documento. Fazer isso cria uma nova entrada em cada folha de estilo, que é ineficiente. Em vez disso, podemos simplesmente anexar uma nova folha de estilo e simplesmente adicionar nossas regras CSS desejadas lá.
Observe que podemos substituir até mesmo os estilos embutidos definidos diretamente nos elementos adicionando "! Important" ao valor da propriedade, a menos que já existam declarações de estilo "! Important" mais específicas para essa propriedade.
fonte
Não tenho representante suficiente para comentar, então formarei uma resposta, mas é apenas uma demonstração do problema em questão.
Parece que, quando os estilos de elemento são definidos em folhas de estilo, eles não são visíveis para getElementById ("someElement"). Style
Este código ilustra o problema ... Código abaixo em jsFiddle .
No Teste 2, na primeira chamada, o valor dos itens deixados é indefinido, e assim, o que deveria ser uma simples alternância fica confuso. Para meu uso, definirei meus valores de estilo importantes inline, mas isso parece anular parcialmente o propósito da folha de estilo.
Aqui está o código da página ...
Espero que isso ajude a esclarecer o problema.
Pular
fonte
Você pode obter os estilos "calculados" de qualquer elemento.
O IE usa algo chamado "currentStyle", o Firefox (e presumo que outros navegadores "compatíveis com o padrão") usa "defaultView.getComputedStyle".
Você precisará escrever uma função de navegador cruzado para fazer isso ou usar uma boa estrutura Javascript como prototype ou jQuery (pesquise "getStyle" no arquivo javascript prototype e "curCss" no arquivo jquery javascript).
Dito isso, se você precisa da altura ou largura, provavelmente deve usar element.offsetHeight e element.offsetWidth.
Lembre-se, se você adicionar um estilo embutido ao elemento em questão, ele pode atuar como o valor "padrão" e será legível por Javascript no carregamento da página, uma vez que é a propriedade de estilo embutido do elemento:
fonte
Esta essência simples de 32 linhas permite que você identifique uma determinada folha de estilo e altere seus estilos com muita facilidade:
fonte
Nunca vi nenhum uso prático disso, mas você provavelmente deve considerar as folhas de estilo DOM . No entanto, eu honestamente acho que é um exagero.
Se você simplesmente deseja obter a largura e a altura de um elemento, independentemente de onde as dimensões estão sendo aplicadas, basta usar
element.offsetWidth
eelement.offsetHeight
.fonte
Talvez tente isto:
fonte