Como posso alterar uma classe de um elemento HTML em resposta a um onclick
evento usando JavaScript?
javascript
html
dom
Nathan Smith
fonte
fonte
element.setAttribute(name, value);
Substituaname
porclass
. Substituavalue
por qualquer nome que você tenha dado à classe, entre aspas. Isso evita a necessidade de excluir a classe atual e adicionar uma diferente. Este exemplo jsFiddle mostra o código completo de funcionamento.<input type='button' onclick='addNewClass(this)' value='Create' />
e na seção javascript:function addNewClass(elem){ elem.className="newClass";
} OnlineRespostas:
Técnicas modernas de HTML5 para mudar de classe
Navegadores modernos adicionaram classList, que fornece métodos para facilitar a manipulação de classes sem a necessidade de uma biblioteca:
Infelizmente, eles não funcionam no Internet Explorer anterior à v10, embora exista uma restrição para adicionar suporte ao IE8 e IE9, disponível nesta página . É, no entanto, cada vez mais suportado .
Solução simples para vários navegadores
A maneira JavaScript padrão de selecionar um elemento está usando
document.getElementById("Id")
, que é o que os exemplos a seguir usam - é claro que você pode obter elementos de outras maneiras e, na situação certa, pode simplesmente usarthis
- no entanto, entrar em detalhes sobre isso está além do escopo da resposta.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.)
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 remover uma classe de um elemento:
Para remover uma única classe de um elemento, sem afetar outras classes em potencial, é necessária uma simples substituição de regex:
Uma explicação desse regex é a seguinte:
O
g
sinalizador informa à substituição para repetir conforme necessário, caso o nome da classe tenha sido adicionado várias vezes.Para verificar se uma classe já está aplicada a um elemento:
O mesmo regex usado acima para remover uma classe também pode ser usado para verificar se existe uma classe específica:
Atribuindo essas ações a eventos de clique único:
Embora seja possível escrever JavaScript diretamente dentro dos atributos de evento HTML (como
onclick="this.className+=' MyClass'"
), isso não é um comportamento recomendado. Especialmente em aplicativos maiores, é conseguido um código mais sustentável, separando a marcação HTML da lógica de interação JavaScript.O primeiro passo para conseguir isso é criando uma função e chamando a função no atributo onclick, por exemplo:
(Não é necessário ter esse código em tags de script, isso é apenas por uma questão de brevidade, por exemplo, e incluir o JavaScript em um arquivo distinto pode ser mais apropriado.)
A segunda etapa é mover o evento onclick para fora do HTML e para o JavaScript, por exemplo, usando addEventListener
(Observe que a parte window.onload é necessária para que o conteúdo dessa função seja executado após o término do carregamento do HTML - sem isso, o MyElement poderá não existir quando o código JavaScript for chamado, para que a linha falhe.)
Frameworks e bibliotecas JavaScript
O código acima é todo em JavaScript padrão, no entanto, é uma prática comum usar uma estrutura ou uma biblioteca para simplificar tarefas comuns, além de se beneficiar de bugs e casos extremos que você pode não pensar ao escrever seu código.
Embora algumas pessoas considerem um exagero adicionar uma estrutura de ~ 50 KB para simplesmente alterar uma classe, se você estiver realizando uma quantidade substancial de trabalho em JavaScript ou qualquer coisa que possa ter um comportamento incomum entre navegadores, vale a pena considerar.
(Muito grosso modo, uma biblioteca é um conjunto de ferramentas projetadas para uma tarefa específica, enquanto uma estrutura geralmente contém várias bibliotecas e executa um conjunto completo de tarefas.)
Os exemplos acima foram reproduzidos abaixo usando jQuery , provavelmente a biblioteca JavaScript mais comumente usada (embora existam outras que também valem a pena investigar).
(Observe que
$
aqui está o objeto jQuery.)Alterando Classes com o jQuery:
Além disso, o jQuery fornece um atalho para adicionar uma classe, se não se aplicar, ou remover uma classe que:
Atribuindo uma função a um evento de clique com jQuery:
ou, sem precisar de um ID:
fonte
class="button MyClass MyClass MyClass"
Você também pode fazer:
E para alternar uma classe (remova, se existir, adicione-a):
fonte
classList
calço de Eli Grey .classList
.Em um dos meus projetos antigos que não usavam jQuery, criei as seguintes funções para adicionar, remover e verificar se o elemento tem classe:
Então, por exemplo, se eu quiser
onclick
adicionar alguma classe ao botão, posso usar isso:Agora, com certeza, seria melhor usar o jQuery.
fonte
Você pode usar
node.className
assim:Isso deve funcionar no IE5.5 e acima, de acordo com o PPK .
fonte
Uau, surpreso, há tantas respostas exageradas aqui ...
fonte
Usando código JavaScript puro:
fonte
Isso está funcionando para mim:
fonte
el.setAttribute('class', newClass)
ou melhorel.className = newClass
. Mas nãoel.setAttribute('className', newClass)
.Você também pode estender o objeto HTMLElement, a fim de adicionar métodos para adicionar, remover, alternar e verificar classes ( gist ):
E, em seguida, basta usar assim (ao clicar, irá adicionar ou remover classe):
Aqui está uma demonstração .
fonte
Apenas para adicionar informações de outra estrutura popular, o Google Closures, veja a classe dom / classes :
Uma opção para selecionar o elemento é usar goog.dom.query com um seletor CSS3:
fonte
Algumas notas menores e ajustes nas regexes anteriores:
Você fará isso globalmente, caso a lista de turmas tenha o nome da turma mais de uma vez. E você provavelmente desejará remover espaços das extremidades da lista de classes e converter vários espaços em um espaço para evitar a execução de espaços. Nenhuma dessas coisas deve ser um problema se o único código que pisca com os nomes de classe usa a regex abaixo e remove um nome antes de adicioná-lo. Mas. Bem, quem sabe quem pode estar brincando com a lista de nomes de turma.
Essa regex não diferencia maiúsculas de minúsculas, de modo que os erros nos nomes das classes podem aparecer antes que o código seja usado em um navegador que não se importa com maiúsculas e minúsculas nos nomes das classes.
fonte
Altere a classe CSS de um elemento com JavaScript no ASP.NET :
fonte
Eu usaria o jQuery e escreveria algo como isto:
Esse código adiciona uma função a ser chamada quando um elemento do id some-element é clicado. A função anexa clicou no atributo de classe do elemento, se ele ainda não faz parte, e o remove, se estiver lá.
Sim, você precisa adicionar uma referência à biblioteca jQuery em sua página para usar esse código, mas pelo menos você pode se sentir confiante de que a maioria das funções da biblioteca funcionaria em praticamente todos os navegadores modernos e economizará tempo implementando seu próprio código para fazer o mesmo.
obrigado
fonte
jQuery
em sua forma longa uma vez.jQuery(function($) { });
torna$
disponível dentro da função em todos os casos.A linha
deveria estar:
fonte
Alterar a classe de um elemento no JavaScript vanilla com suporte ao IE6
Você pode tentar usar a
attributes
propriedade node para manter a compatibilidade com navegadores antigos, mesmo no IE6:fonte
Aqui está a minha versão, funcionando plenamente:
Uso:
fonte
foobar
se você tentar remover a aulafoo
. O JS nos atributos intrínsecos do manipulador de eventos foi quebrado antes de ser editado. A resposta aceita de 4 anos é muito melhor.foobar
problema. Veja o teste aquiAqui está um toggleClass para alternar / adicionar / remover uma classe em um elemento:
veja jsfiddle
veja também minha resposta aqui para criar uma nova classe dinamicamente
fonte
Eu uso as seguintes funções JavaScript baunilha no meu código. Eles usam expressões regulares e
indexOf
mas não exigem a citação de caracteres especiais em expressões regulares.Você também pode usar o element.classList em navegadores modernos.
fonte
AS OPÇÕES.
Aqui estão alguns exemplos de estilo versus classList para que você veja quais são as opções disponíveis e como usar
classList
para fazer o que deseja.style
vs.classList
A diferença entre
style
eclassList
é que comstyle
você está adicionando para as propriedades de estilo do elemento, masclassList
está controlando meio da classe (es) do elemento (add
,remove
,toggle
,contain
), vou mostrar-lhe como usar oadd
eremove
método, pois esses são os populares.Exemplo de estilo
Se você deseja adicionar
margin-top
propriedades a um elemento, faça o seguinte:Exemplo classList
Digamos que tenhamos
<div class="class-a class-b">
, nesse caso, já temos 2 classes adicionadas ao nosso elemento divclass-a
eclass-b
, e queremos controlar quais classesremove
e para qual classeadd
. Aqui é ondeclassList
se torna útil.Retirar
class-b
Adicionar
class-c
fonte
Apenas pensei em colocar isso em:
fonte
basta dizer, a
myElement.classList="new-class"
menos que você precise manter outras classes existentes; nesse caso, você pode usar osclassList.add, .remove
métodos.fonte
OK, acho que, neste caso, você deve usar o jQuery ou escrever seus próprios métodos em javascript puro. Minha preferência é adicionar meus próprios métodos, em vez de injetar todo o jQuery no meu aplicativo, se eu não precisar disso por outros motivos.
Eu gostaria de fazer algo como abaixo como métodos na minha estrutura javascript para adicionar algumas funcionalidades que lidam com a adição de classes, exclusão de classes, etc, semelhantes ao jQuery, isso é totalmente suportado no IE9 +, também meu código está escrito no ES6, então você precisa para garantir que seu navegador o suporte ou você esteja usando algo como babel, caso contrário, use a sintaxe ES5 em seu código, também dessa maneira, encontraremos elemento via ID, o que significa que o elemento precisa ter um ID para ser selecionado:
e você pode simplesmente chamá-los como abaixo, imagine que seu elemento tem id de 'id' e classe de 'class', certifique-se de passá-los como uma string, você pode usar o utilitário como abaixo:
fonte
classList
API do DOM:Uma maneira muito conveniente de adicionar e remover classes é a
classList
API do DOM. Essa API nos permite selecionar todas as classes de um elemento DOM específico para modificar a lista usando javascript. Por exemplo:Podemos observar no log que estamos recuperando um objeto não apenas com as classes do elemento, mas também com muitos métodos e propriedades auxiliares. Este objeto herda da interface DOMTokenList , uma interface usada no DOM para representar um conjunto de tokens separados por espaço (como classes).
Exemplo:
fonte
Sim, existem muitas maneiras de fazer isso. Na sintaxe ES6, podemos alcançar facilmente. Use este código para alternar entre adicionar e remover classe.
fonte
usando a resposta aceita acima, aqui está uma função simples entre navegadores para adicionar e remover classes
adicionar classe:
remover classe:
fonte
Muitas respostas, muitas boas respostas.
OU
É isso aí.
E, se você realmente quer saber o porquê e se educar, sugiro ler a resposta de Peter Boughton , é perfeito.
Nota:
Isso é possível com ( documento ou evento ):
getElementById()
getElementsByClassName()
querySelector()
querySelectorAll()
fonte
Existe uma propriedade className em javascript para alterar o nome da classe de um elemento HTML. O valor da classe existente será substituído pelo novo que você atribuiu em className.
Crédito - https://jaischool.com/javascript-lang/how-to-change-class-name-of-an-html-element-in-javascript.html
fonte
A questão do OP era Como posso alterar a classe de um elemento com JavaScript?
Navegadores modernos permitem fazer isso com uma linha de javascript :
document.getElementById('id').classList.replace('span1','span2')
O
classList
atributo fornece um DOMTokenList que possui uma variedade de métodos . Você pode operar na classList de um elemento usando manipulações simples como add () , remove () ou replace () . Ou fique muito sofisticado e manipule classes como se fosse um objeto ou Map com chaves () , valores () , entradas ()A resposta de Peter Boughton é ótima, mas agora tem mais de uma década. Todos os navegadores modernos agora suportam DOMTokenList - consulte https://caniuse.com/#search=classList e até o IE11 suporta alguns métodos DOMTokenList
fonte
tentar
Mostrar snippet de código
fonte
Código JavaScript de trabalho:
Você pode baixar um código de trabalho neste link .
fonte
Aqui está um código jQuery simples para fazer isso.
Aqui,
Boa sorte.
fonte