1 / 11
Modulo 3 / JavaScript

DOM

Seleção, manipulação e criação de elementos.

school Aula 14 schedule 2 horas

Conceito

O que é o DOM?

account_tree Document Object Model

  • Representação do HTML como uma árvore de objetos
  • Cada tag HTML vira um "nó" (node) na árvore
  • JavaScript usa o DOM para ler e modificar a página
  • Mudanças no DOM refletem instantaneamente na tela

nature Árvore DOM

document
└── html
├── head
│ └── title
└── body
├── h1
├── p
└── div
└── button

Cada elemento tem pais, filhos e irmãos.

Encontrando elementos

Seleção de elementos

star querySelector (recomendado)

// Seleciona O PRIMEIRO elemento const titulo = document .querySelector('h1'); const btn = document .querySelector('.meu-botao'); const form = document .querySelector('#formulario'); // Aceita qualquer seletor CSS! const item = document .querySelector('nav a.active');

select_all querySelectorAll

// Seleciona TODOS os elementos const paragrafos = document .querySelectorAll('p'); // Retorna um NodeList console.log(paragrafos.length); // Percorrer com forEach: paragrafos.forEach((p) => { console.log(p.textContent); });

history Métodos antigos (ainda funcionam)

document.getElementById('titulo'); // por ID document.getElementsByClassName('card'); // por classe (HTMLCollection) document.getElementsByTagName('p'); // por tag (HTMLCollection)

Prefira querySelector e querySelectorAll por serem mais flexíveis e consistentes.

Alterando a página

Manipulando conteúdo

edit_note Texto e HTML

const titulo = document.querySelector('h1'); // Texto puro titulo.textContent = 'Novo título'; // HTML (interpreta tags) titulo.innerHTML = 'Texto <strong>negrito</strong>'; // Ler o conteúdo atual console.log(titulo.textContent);

tune Atributos

const link = document.querySelector('a'); const img = document.querySelector('img'); // Ler atributo console.log(link.getAttribute('href')); // Alterar atributo link.setAttribute('href', '#novo'); img.src = 'foto.jpg'; img.alt = 'Minha foto'; // Atalho para data attributes console.log(link.dataset.id);

Estilo dinâmico

Estilos e classes

palette Estilo inline

const box = document.querySelector('.box'); // Alterar estilo diretamente box.style.backgroundColor = '#6366f1'; box.style.padding = '20px'; box.style.borderRadius = '12px'; // camelCase no JS! // background-color -> backgroundColor // border-radius -> borderRadius

star classList (recomendado)

const el = document.querySelector('.menu'); // Adicionar classe el.classList.add('aberto'); // Remover classe el.classList.remove('aberto'); // Alternar (toggle) el.classList.toggle('aberto'); // Verificar se tem el.classList.contains('aberto'); // true ou false
lightbulb Prefira classList ao invés de style. Mantém a separação entre JS e CSS.

Gerando HTML com JS

Criando elementos

add_box createElement

// 1. Criar o elemento const card = document.createElement('div'); // 2. Configurar card.className = 'card'; card.textContent = 'Novo card!'; // 3. Adicionar ao DOM const container = document .querySelector('.container'); container.appendChild(card);

delete Removendo elementos

// Remover um elemento const item = document .querySelector('.item'); item.remove(); // Remover todos os filhos const lista = document .querySelector('ul'); lista.innerHTML = '';

Na prática

Lista dinâmica

HTML

<ul id="lista"></ul> <input id="input" placeholder="Nova tarefa"> <button id="btn">Adicionar</button>

JavaScript

const lista = document.querySelector('#lista'); const input = document.querySelector('#input'); const btn = document.querySelector('#btn'); function adicionarTarefa() { const texto = input.value.trim(); if (!texto) return; const li = document.createElement('li'); li.textContent = texto; lista.appendChild(li); input.value = ''; } btn.addEventListener('click', adicionarTarefa);

format_list_numbered Passo a passo

1 Selecionar os elementos com querySelector
2 Ler o valor do input com .value
3 Criar um novo <li> com createElement
4 Definir o texto com textContent
5 Inserir na lista com appendChild
6 Limpar o input para permitir nova entrada

Relações entre nós

Navegação no DOM

account_tree Propriedades de navegação

const item = document.querySelector('li'); // Pai item.parentElement // Filhos item.children item.firstElementChild item.lastElementChild // Irmãos item.nextElementSibling item.previousElementSibling

place_item Inserção avançada

const pai = document.querySelector('.pai'); const novo = document.createElement('div'); // No final (padrão) pai.appendChild(novo); // No início pai.prepend(novo); // Antes de um elemento específico const ref = pai.children[1]; pai.insertBefore(novo, ref);

Padrão comum

Renderizando dados

const produtos = [ { nome: 'Notebook', preco: 4500 }, { nome: 'Mouse', preco: 89 }, { nome: 'Teclado', preco: 250 }, ]; const container = document .querySelector('#produtos'); produtos.forEach((prod) => { const card = document .createElement('div'); card.className = 'card'; card.innerHTML = ` <h3>${prod.nome}</h3> <p>R$ ${prod.preco}</p> `; container.appendChild(card); });

pattern Esse padrão vai aparecer sempre

1 Ter um array de dados (vindo de uma API ou definido no código)
2 Iterar com forEach ou map
3 Criar elementos HTML para cada item
4 Inserir no container do DOM
warning Cuidado com innerHTML quando os dados vêm do usuário (risco de XSS). Prefira textContent para texto puro.

Hora de praticar

Exercício prático

rocket_launch Cards de produtos

  1. Crie um HTML com um div#container vazio
  2. No JavaScript, crie um array com 5 produtos (nome, preco, categoria)
  3. Use forEach para criar um card para cada produto e inserir no container
  4. Cada card deve mostrar nome, preço formatado (R$) e categoria
  5. Adicione um botão "Mostrar só eletrônicos" que filtra os cards usando classList.toggle
  6. Adicione um botão "Limpar" que remove todos os cards
lightbulb Desafio extra: adicione um input e botão para inserir novos produtos dinamicamente.
Próxima aula

Aula 15

Eventos: click, submit, input e delegação.

task_alt O que aprendemos hoje

  • check_circle O que é o DOM e como ele representa o HTML
  • check_circle Seleção de elementos com querySelector
  • check_circle Manipulação de conteúdo, atributos e estilos
  • check_circle Criação e remoção de elementos
  • check_circle Renderização dinâmica de dados no DOM
Próxima aula
auto_stories Referência: MDN DOM
Leandro Medeiros