10  DOM e Eventos

DOM (Document Object Model) é a estrutura da página HTML que o JavaScript consegue manipular.

Com DOM e eventos, você cria interfaces interativas.

10.1 Selecionando elementos

<h2 id="titulo">Loja Técnica</h2>
<button id="botao">Clique</button>
const titulo = document.getElementById("titulo")
const botao = document.getElementById("botao")

titulo.textContent = "Sistema Escolar"

Outros seletores:

const primeiroCard = document.querySelector(".card")
const todosOsCards = document.querySelectorAll(".card")

10.2 Alterando estilos e classes

const card = document.querySelector(".card")

card.classList.add("ativo")
card.classList.toggle("destaque")
card.style.border = "2px solid #1f6feb"

10.3 Eventos

botao.addEventListener("click", () => {
  alert("Botão clicado!")
})

Eventos comuns:

  • click
  • input
  • change
  • submit
  • keydown

10.4 Formulários

<form id="formAluno">
  <input id="nome" placeholder="Nome" />
  <button type="submit">Salvar</button>
</form>
const form = document.getElementById("formAluno")

form.addEventListener("submit", (event) => {
  event.preventDefault()

  const nome = document.getElementById("nome").value.trim()

  if (!nome) {
    alert("Informe o nome")
    return
  }

  console.log(`Aluno cadastrado: ${nome}`)
})

10.5 Criando elementos dinamicamente

<ul id="lista"></ul>
const lista = document.getElementById("lista")
const itens = ["Caderno", "Caneta", "Lápis"]

for (const item of itens) {
  const li = document.createElement("li")
  li.textContent = item
  lista.appendChild(li)
}

10.6 Delegação de eventos

Útil quando itens são criados dinamicamente.

lista.addEventListener("click", (event) => {
  if (event.target.tagName === "LI") {
    event.target.classList.toggle("feito")
  }
})

10.7 Exemplo integrado: contador

<p id="valor">0</p>
<button id="menos">-</button>
<button id="mais">+</button>
const campo = document.getElementById("valor")
const botaoMenos = document.getElementById("menos")
const botaoMais = document.getElementById("mais")

let contador = 0

function renderizar() {
  campo.textContent = contador
}

botaoMenos.addEventListener("click", () => {
  contador--
  renderizar()
})

botaoMais.addEventListener("click", () => {
  contador++
  renderizar()
})

10.8 Exercícios

  1. Crie uma página com botão que altera a cor de fundo.
  2. Faça um contador com botões de aumentar e diminuir.
  3. Valide um formulário para impedir envio com campo vazio.
  4. Crie uma lista de tarefas com botão de remover item.
  5. Desafio: implemente filtro de tarefas (todas, pendentes, concluídas).