Eu tenho um elemento que já tem uma classe:
<div class="someclass">
<img ... id="image1" name="image1" />
</div>
Agora, quero criar uma função JavaScript que adicione uma classe ao div
(não substitua, mas adicione).
Como eu posso fazer isso?
javascript
css
dom-manipulation
Blankman
fonte
fonte
element.classList.add("my-class")
.Respostas:
Se você está segmentando apenas navegadores modernos:
Use element.classList.add para adicionar uma classe:
E element.classList.remove para remover uma classe:
Se você precisar oferecer suporte ao Internet Explorer 9 ou inferior:
Adicione um espaço mais o nome da sua nova classe à
className
propriedade do elemento Primeiro, coloque umid
no elemento para que você possa facilmente obter uma referência.Então
Observe o espaço antes
otherclass
. É importante incluir o espaço, caso contrário, ele compromete as classes existentes que vêm antes dele na lista de classes.Consulte também element.className no MDN .
fonte
A maneira mais fácil de fazer isso sem nenhuma estrutura é usar o método element.classList.add .
Edit: E se você deseja remover a classe de um elemento -
Prefiro não ter que adicionar nenhum espaço vazio e duplicar o tratamento de entrada (o que é necessário ao usar a
document.className
abordagem). Existem algumas limitações do navegador , mas você pode contorná-las usando polyfills .fonte
encontre o elemento de destino "d" como desejar e depois:
você pode agrupar isso de maneiras mais inteligentes para verificar a pré-existência e verificar os requisitos de espaço etc.
fonte
split
o nome da classe no espaço em branco, remova o que você não deseja da matriz resultante e depoisjoin
a matriz novamente ... ou useelement.classList.remove
.Adicionar classe
Compatível com Cruz
No exemplo a seguir, adicionamos
classname
a ao<body>
elemento Isso é compatível com o IE-8.Este é um atalho para o seguinte ..
atuação
Se você está mais preocupado com o desempenho da compatibilidade cruzada, pode reduzi-lo para o seguinte, que é 4% mais rápido.
Conveniência
Como alternativa, você pode usar o jQuery, mas o desempenho resultante é significativamente mais lento. 94% mais lento de acordo com jsPerf
Removendo a classe
atuação
Usar o jQuery seletivamente é o melhor método para remover uma classe se você estiver preocupado com o desempenho
Sem jQuery, é 32% mais lento
Referências
Usando o protótipo
Usando YUI
fonte
a.classList ? ...
) terá alguma diferença de velocidade em comparação com a versão normal (if (a.classList) { ....
)?classList.remove()
. Por que você não usou? é muito mais rápido do que jQuery jsperf.com/remove-class-vanilla-vs-jqueryclassList
para tudo, exceto para remover as aulas, é por isso que estou perguntando.Outra abordagem para adicionar a classe ao elemento usando JavaScript puro
Para adicionar classe:
Para remover a classe:
fonte
Quando o trabalho que estou realizando não justifica o uso de uma biblioteca, utilizo estas duas funções:
fonte
if( cn.indexOf( classname ) != -1 ) { return; }
Lembre-se de que se você adicionar a classe "btn" com a classe "btn-info" já aqui, isso falhará.element.className.split(" ");
para evitar o problema @AlexandreDieulot relatado aqui.Supondo que você esteja fazendo mais do que apenas adicionar esta classe (por exemplo, você tem solicitações assíncronas e assim por diante), recomendo uma biblioteca como Prototype ou jQuery .
Isso simplificará tudo o que você precisará fazer (incluindo isso).
Então, digamos que você tenha o jQuery em sua página agora, você pode usar um código como este para adicionar um nome de classe a um elemento (em carga, neste caso):
Confira o navegador da API jQuery para outras coisas.
fonte
Você pode usar o método classList.add OR classList.remove para adicionar / remover uma classe de um elemento.
O código acima adicionará (e NÃO substituirá) uma classe "anyclass" a nameElem. Da mesma forma, você pode usar o método classList.remove () para remover uma classe.
fonte
Para adicionar uma classe adicional a um elemento:
Para adicionar uma classe a um elemento, sem remover / afetar os valores existentes, acrescente um espaço e o novo nome da classe, da seguinte maneira:
Para alterar todas as classes para um elemento:
Para substituir todas as classes existentes por uma ou mais novas classes, configure o atributo className:
(Você pode usar uma lista delimitada por espaço para aplicar várias classes.)
fonte
Se você não deseja usar o jQuery e deseja suportar navegadores mais antigos:
fonte
Eu sei que o IE9 está encerrado oficialmente e podemos alcançá-lo com o
element.classList
que foi dito acima, mas tentei aprender como ele funciona semclassList
a ajuda de muitas respostas acima.O código abaixo estende muitas respostas acima e as aprimora, evitando a adição de classes duplicadas.
fonte
Eu também acho que a maneira mais rápida é usar Element.prototype.classList como no es5:
document.querySelector(".my.super-class").classList.add('new-class')
mas no ie8 não existe algo como Element.prototype.classList, de qualquer maneira, você pode preenchê-lo com esse snippet (fique à vontade para editá-lo e melhorá-lo) ):fonte
Apenas para elaborar o que os outros disseram, várias classes CSS são combinadas em uma única sequência, delimitada por espaços. Portanto, se você quisesse codificá-lo, seria simplesmente assim:
A partir daí, você pode derivar facilmente o javascript necessário para adicionar uma nova classe ... basta acrescentar um espaço seguido pela nova classe à propriedade className do elemento. Sabendo disso, você também pode escrever uma função para remover uma classe posteriormente, se necessário.
fonte
Para adicionar, remover ou verificar classes de elementos de uma maneira simples:
fonte
Você pode usar uma abordagem moderna semelhante ao jQuery
Se você precisar alterar apenas um elemento, o primeiro que JS encontrará no DOM, você pode usar este:
Lembre-se de deixar um espaço antes do nome da classe.
Se você tiver várias classes nas quais deseja adicionar uma nova classe, poderá usá-la assim
fonte
Eu acho que é melhor usar JavaScript puro, que podemos executar no DOM do navegador.
Aqui está a maneira funcional de usá-lo. Eu usei o ES6, mas sinta-se à vontade para usar o ES5 e a expressão ou definição de função, conforme o seu StyleGuide JavaScript.
fonte
Amostra com JS puro. No primeiro exemplo, obtemos a identificação do nosso elemento e adicionamos, por exemplo, 2 classes.
No segundo exemplo, obtemos o nome da classe do elemento e adicionamos mais 1.
fonte
Para aqueles que usam o Lodash e desejam atualizar a
className
string:fonte
primeiro, dê um ID ao div. Em seguida, chame a função appendClass:
fonte
indexOf
é uma solução ingênua e tem um problema já apontado .Você pode usar a querySelector da API para selecionar seu elemento e, em seguida, criar uma função com o elemento e o novo nome da classe como parâmetros. Usando a lista de classes para navegadores modernos, além do IE8. Em seguida, você pode chamar a função após um evento.
fonte
Mais curto
Mostrar snippet de código
fonte
OU:
A primeira abordagem ajudou a adicionar a classe quando a segunda abordagem não funcionou.
Não se esqueça de manter um espaço na frente da
' someclassname'
primeira abordagem.Para remoção, você pode usar:
fonte
Esse código js funciona para mim
fornece substituição de nome de classe
Para adicionar basta usar
Para remover o uso
Espero que isso seja útil para alguém
fonte
Na YUI, se você incluir yuidom , poderá usar
YAHOO.util.Dom.addClass('div1','className');
HTH
fonte