Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] 02. Detectando Interação - Atividadade 04 e 06

Olá, boa noite.

Gostaria de saber por que na atividade 04 "Criar elementos" a classe no elemento div foi adicionada usando classList.add da seguinte forma

containerItemDaLista.classList.add("lista-item-container");

e os atributos de outros elementos foram adicionados adicionando .nomeAtributo à variável, por exemplo

    inputCheckBox.type = "checkbox";
    inputCheckBox.id = "checkbox-" + contador++;

Vi que usar a linha abaixo não funciona

containerItemDaLista.class = "lista-item-container";

mas fazer

containerItemDaLista.className = "lista-item-container";

aparentemente tem o mesmo efeito.

Há diferenças entre containerItemDaLista.className = "lista-item-container" e containerItemDaLista.classList.add("lista-item-container")?

Obrigado!

1 resposta
solução!

Oi, Agostino.

A principal razão para existirem formas diferentes de manipular classes e atributos reside na maneira como o JavaScript mapeia os elementos do DOM.

Por que class não funciona?

No JavaScript, class é uma palavra reservada. Ela é usada para criar classes de objetos (Orientação a Objetos). Por isso, não podemos acessar o atributo de classe de um elemento HTML usando apenas .class. Pra resolver esse conflito de nomes, os criadores da linguagem definiram a propriedade .className.

Diferença entre className e classList.add()

Embora ambos alterem as classes de um elemento, eles funcionam de maneiras distintas:

1. className

Funciona como uma atribuição direta de string.

  • Se você usar elemento.className = "classe-a", o JavaScript define exatamente isso para o elemento.
  • O perigo: se o elemento já tivesse uma "classe-b" e você fizesse essa atribuição, a "classe-b" seria apagada e substituída por "classe-a". É como trocar todo o conteúdo de uma caixa.

2. classList.add()

Trabalha com uma lista de classes (um objeto especial chamado DOMTokenList).

  • Ele é mais específico: ele apenas adiciona a nova classe à lista que já existe, sem mexer nas outras.
  • Além do .add(), o classList oferece métodos úteis como .remove(), .toggle() (para alternar) e .contains() (para verificar se a classe existe).

E por que atributos como type e id funcionam direto?

Diferente de class, palavras como id, type, src ou value não são palavras reservadas do JavaScript. Por isso, os navegadores permitem que a gente acesse e modifique esses valores diretamente como propriedades do objeto.

  • input.id = "novo-id" — Funciona porque não há conflito de nomes.
  • input.type = "checkbox" — Funciona pela mesma razão.

Qual utilizar no dia a dia?

MétodoQuando usar
classList.add()Recomendado para a maioria dos casos, pois preserva outras classes que o elemento possa ter.
classNameUse quando você quiser limpar todas as classes existentes e definir uma (ou várias) do zero.
setAttribute()Útil para atributos personalizados (data-attributes) ou quando você quer uma sintaxe única para qualquer atributo.

No seu projeto de lista de compras, o uso do classList.add é uma boa prática porque garante que, se no futuro você adicionar uma classe de animação ou estilo extra via CSS, o JavaScript não irá removê-la acidentalmente ao tentar formatar o container.

Espero que essa explicação tenha ajudado a esclarecer o comportamento do DOM!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!