Eu gostaria de retornar uma string com todo o conteúdo de uma regra CSS, como o formato que você veria em um estilo embutido. Eu gostaria de poder fazer isso sem saber o que está contido em uma regra específica, então não posso apenas retirá-los por nome de estilo (como .style.width
etc.)
O CSS:
.test {
width:80px;
height:50px;
background-color:#808080;
}
O código até agora:
function getStyle(className) {
var classes = document.styleSheets[0].rules || document.styleSheets[0].cssRules
for(var x=0;x<classes.length;x++) {
if(classes[x].selectorText==className) {
//this is where I can collect the style information, but how?
}
}
}
getStyle('.test')
javascript
html
css
Diodeus - James MacFarlane
fonte
fonte
Respostas:
Adaptado a partir daqui , com base na resposta de scunliffe:
fonte
var classes
deve estardocument.styleSheets[0].rules[0].cssRules
no Chrome. Isso poderia ser adicionado (criativamente) ao shim na resposta.Visto que a resposta aceita de "nsdel" está disponível apenas com uma folha de estilo em um documento, esta é a solução de trabalho completa adaptada:
Aviso: o seletor deve ser o mesmo do CSS.
fonte
global_
é apenas um apelido para o objeto janela. Eu editei o trecho de código. Deve funcionar agoraSOLUÇÃO 1 (CROSS-BROWSER)
SOLUÇÃO 2 (CROSS-BROWSER)
fonte
Algumas diferenças do navegador a serem observadas:
Dado o CSS:
e dado o exemplo do InsDel, as classes terão 2 classes no FF e 3 classes no IE7 .
Meu exemplo ilustra isso:
fonte
Aqui está o código para iterar por meio de todas as regras em uma página:
fonte
Observação: "menu" é um ID de elemento ao qual você aplicou CSS. "className" um nome de classe css que precisamos para obter seu texto.
fonte
item
método leva um índice inteiro, não um className).Não encontrei nenhuma das sugestões para realmente funcionar. Aqui está um mais robusto que normaliza o espaçamento ao encontrar classes.
Aqui está ele em ação no console do Chrome.
fonte
Fiz uma função auxiliar semelhante que mostra os estilos desnecessários para esta página. anexa um
<div>
ao corpo listando todos os estilos que não foram usados.(para ser usado com o console do firebug)
fonte
Adaptei a resposta de julmot para obter um resultado mais completo. Este método também retornará estilos em que a classe faz parte do seletor.
Além disso, fiz uma função que coleta as definições de estilo css para a subárvore de um nó raiz que você fornece (por meio de um seletor jquery).
Observe que se uma classe é definida várias vezes com o mesmo seletor, a função acima selecionará apenas o primeiro. Observe que o exemplo usa jQuery (mas pode ser facilmente reescrito para não usá-lo)
fonte
// funciona no IE, não tenho certeza sobre outros navegadores ...
fonte
Esta versão percorrerá todas as folhas de estilo em uma página. Para minhas necessidades, os estilos estavam geralmente do segundo ao último das 20+ folhas de estilo, então eu os verifico ao contrário.
fonte
Eu adicionei o retorno do objeto onde os atributos são analisados de estilo / valores:
fonte
style.cssText.match(...).1
é nulo ou não é um objetoUncaught ReferenceError: classStyleTxt is not defined
Eu criei uma versão que pesquisa todas as folhas de estilo e retorna correspondências como um objeto de chave / valor. Você também pode especificar startsWith para corresponder aos estilos filho.
retorna:
de:
O código:
Estou usando isso na produção como parte do projeto de forma pura . Espero que ajude.
fonte
Eu enfrentei o mesmo problema. E com a ajuda de caras eu vim com uma solução realmente inteligente que resolve esse problema totalmente (rodar no Chrome).
Extraia todas as imagens da rede
fonte
Em uma linha, imprime o css gerado para qualquer consulta.
fonte
Com base na resposta @dude, isso deve retornar estilos relevantes em um objeto, por exemplo:
Isso retornará:
Código:
fonte
_.pickBy(classes[x].style, (k,v) => isNaN(parseInt(k)) && typeof(v) == 'string' && v && v != 'initial' && k != 'cssText' )