Como posso acessar uma propriedade de uma classe CSS por jQuery? Eu tenho uma classe CSS como:
.highlight {
color: red;
}
E eu preciso fazer uma animação colorida em um objeto:
$(this).animate({
color: [color of highlight class]
}, 750);
Para que eu possa mudar de red
para blue
(no CSS) e minha animação funcione de acordo com o meu CSS.
Uma abordagem seria colocar um elemento invisível na highlight
classe e obter a cor do elemento para usar na animação, mas acho que essa é uma prática muito, muito ruim.
Alguma sugestão?
Escrevi uma pequena função que percorre as folhas de estilo no documento procurando o seletor correspondente e o estilo.
Há uma ressalva, isso funcionará apenas para folhas de estilo definidas com uma marca de estilo ou folhas externas do mesmo domínio.
Se a planilha for conhecida, você poderá passá-la e evitar que você procure várias planilhas (mais rápido e se você tiver regras em colisão, é mais exato).
Eu testei apenas no jsFiddle com alguns casos de teste fracos, deixe-me saber se isso funciona para você.
function getStyleRuleValue(style, selector, sheet) {
var sheets = typeof sheet !== 'undefined' ? [sheet] : document.styleSheets;
for (var i = 0, l = sheets.length; i < l; i++) {
var sheet = sheets[i];
if( !sheet.cssRules ) { continue; }
for (var j = 0, k = sheet.cssRules.length; j < k; j++) {
var rule = sheet.cssRules[j];
if (rule.selectorText && rule.selectorText.split(',').indexOf(selector) !== -1) {
return rule.style[style];
}
}
}
return null;
}
exemplo de uso:
var color = getStyleRuleValue('color', '.foo'); // searches all sheets for the first .foo rule and returns the set color style.
var color = getStyleRuleValue('color', '.foo', document.styleSheets[2]);
Esqueci de levar em consideração as regras agrupadas. Eu mudei a seleção do seletor para isso:
if (rule.selectorText.split(',').indexOf(selector) !== -1) {
agora ele verificará se algum dos seletores de uma regra agrupada corresponde.
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras