O atributo class no HTML pode ter muitas funcionalidades, como base de operação para o Javascript bem como estilização no CSS. Um atributo tão importante como esse precisa ser gerenciado com cuidado, afinal, a remoção indevida pode quebrar a nossa aplicação web.
A verdade é que gerenciar classes é algo relativamente simples de se fazer quando utilizamos o classList, uma funcionalidade do Javascript. Há outras formas de fazer isso, mas o processo pode ser um pouco mais longo e requer um cuidado maior.
Vamos ver no exemplo abaixo como podemos definir uma classe para um elemento e como remover usando a propriedade className.
<p id="title">Hello, SatellaSoft!</p>
<script>
const title = document.querySelector('#title')
//set
title.className = 'text border'
//remove border
title.className = 'text'
</script>Perceba que no exemplo acima, a gente acessou o elemento p através do seletor id, em seguida, adicionamos a classe text e border. Para remover a classe border, tivemos que fazer novamente o uso do className omitindo a border e informando novamente a classe text.
Agora fica a pergunta, e se a gente precisasse saber se uma classe existe antes de adicionar ou remover outra? Utilizando o exemplo anterior, certamente iríamos fazer o uso do indexOf ou algo assim.
Entendendo o classList no Javascript
Antes de prosseguirmos com exemplos práticos do uso da propriedade classList, vamos entender o que podemos fazer com ela e o por quê de utilizá-la.
Acontece que utilizando esse recurso a gente pode facilmente verificar se uma classe existe, remover apenas uma classe e manter as outras intactas, assim como adicionar novas sem se preocupar com a estrutura existente. Em outras palavras, vamos remover e adicionar apenas o que definirmos.
Verificando se uma classe existe com classList
Podemos utilizar o método contains() para verificar se uma classe existe ou não. O valor retornado é um booleano e ela espera o nome da classe como parâmetro, conforme mostra o exemplo abaixo.
const title = document.querySelector('#title')
const exists = title.classList.contains('title')
if(exists)
alert('Existe')
else
alert('Não tem')Perceba que a gente fez o uso novamente da variável title que acessa o nosso elemento p. Note que classList só pode ser acessada através do nosso elemento, assim chamamos o método contains passando o valor title como parâmetro. Por fim, o resultado do contains é definido na variável exists que é analisada na estrutura if logo abaixo.
Adicionando uma nova classe com classList
O processo para adicionar uma nova classe é bem simples, faremos a utilização do método add, conforme mostra o exemplo abaixo.
const title = document.querySelector('#title')
title.classList.add('border')Removendo uma classe com classList
Para remover uma classe, utilizamos o método remove, assim como o add e contains, ele espera como parâmetro o nome da classe a ser removida.
const title = document.querySelector('#title')
//Removemos
title.classList.remove('border')Entendendo o método toggle da propriedade classList
Imagine que você queira exibir ou ocultar um elemento na página, como um menu, por exemplo, certamente a gente verificaria se a classe existiria para então removê-la, enquanto para exibir, verificamos se não existe para exibir, conforme mostra o código abaixo.
const menu = document.querySelector('.menu')
if (menu.classList.contains('show'))
menu.classList.remove('show')
else
menu.classList.add('show')Embora o código acima esteja correto, ele certamente pode ser melhorado, mais especificamente com o uso do método toggle(), que basicamente remove uma classe se existir ou adicionar quando não existe, exatamente o que a gente quer. Veja o código abaixo como fica bem mais simples.
const menu = document.querySelector('.menu')
menu.classList.toggle('show')




