JavaScript: Manipulação do DOM

Última atualização: 2026-10-13

O DOM (Document Object Model) é uma árvore que o navegador cria a partir do documento HTML. Operando nessa árvore com JavaScript, você pode mudar dinamicamente o conteúdo, a estrutura e os atributos da página — como colher frutas de uma árvore, enxertar novos galhos ou podar madeira morta.


Métodos DOM relacionados:querySelectorAll removeAttribute querySelector createElement setAttribute getAttribute textContent appendChild innerHTML NodeList remove() class href

1. Selecionando Elementos

O primeiro passo na manipulação do DOM é sempre "encontrar primeiro".

Método Retorna Descrição
getElementById('id') Elemento único Mais rápido, id é único
getElementsByClassName('cls') HTMLCollection Coleção ao vivo, sincroniza com mudanças no DOM
getElementsByTagName('tag') HTMLCollection Igual ao anterior
querySelector('seletor') Elemento único Seletor CSS, retorna o primeiro que combina
querySelectorAll('seletor') NodeList Coleção estática, não muda com o DOM
💡 Dica: Família querySelector vs getElementBy*: a primeira usa seletores CSS (mais flexível), a segunda tem desempenho levemente melhor. Para o dia a dia, prefira querySelector — é mais intuitivo.

HTML
<div id="box" class="card active">Olá</div>
<div class="card">Mundo</div>
<p class="card">JS</p>

<script>
const porId = document.getElementById('box');
console.log('porId:', porId.textContent);

const porClasse = document.getElementsByClassName('card');
console.log('porClasse contagem:', porClasse.length);

const porTag = document.getElementsByTagName('p');
console.log('porTag:', porTag[0].textContent);

const primeiro = document.querySelector('.card');
console.log('querySelector:', primeiro.textContent);

const todos = document.querySelectorAll('.card');
console.log('querySelectorAll contagem:', todos.length);
</script>


2. Modificando Conteúdo

Depois de encontrar um elemento, a necessidade mais comum é mudar "o que ele diz".

⚠️ Nota: Nunca use innerHTML para inserir conteúdo fornecido pelo usuário, senão atacantes podem injetar scripts maliciosos. É como afixar uma carta de um diretamente no mural — a carta pode conter uma "bomba".

▶ Exemplo: textContent vs innerHTML

▶ Experimente

3. Modificando Atributos

Atributos de elementos HTML (id, class, src, href, etc.) também podem ser lidos e escritos com JS.

Método Descrição
getAttribute('nome') Ler valor do atributo
setAttribute('nome', 'valor') Definir atributo
removeAttribute('nome') Remover atributo
💡 Dica: Alguns atributos podem ser acessados diretamente com notação de ponto: el.id, el.className, el.src. Mas para atributos customizados (data-*), use getAttribute ou el.dataset.

▶ Experimente

4. Criando e Inserindo Elementos

Uma das habilidades centrais de manipulação do DOM: "criar" um elemento do nada, depois conectá-lo à árvore.

Método Descrição
createElement('tag') Criar nó de elemento
createTextNode('texto') Criar nó de texto
appendChild(filho) Anexar ao final
insertBefore(novo, ref) Inserir antes de ref

▶ Exemplo: Adicionando Itens de Lista Dinamicamente

▶ Experimente

5. Removendo e Clonando Elementos

Método Descrição
removeChild(filho) Pai remove nó filho
remove() Elemento remove a si mesmo (API mais recente)
cloneNode(true/false) true = clone profundo (incluindo filhos), false = clone raso
💡 Dica: remove() é mais simples que removeChild(), mas se você precisar obter o nó removido para processamento posterior, use removeChild() — ele retorna o nó removido.

▶ Exemplo: Removendo e Clonando

▶ Experimente

Métodos DOM relacionados:querySelectorAll removeAttribute querySelector createElement setAttribute getAttribute textContent appendChild innerHTML NodeList remove() class href

❓ Perguntas Frequentes

P O que acontece se querySelector retornar null?
R Chamar qualquer propriedade/método em null lançará um TypeError. Então é melhor verificar antes de operar: const el = document.querySelector('.xxx'); if (el) { ... }.
P Qual a diferença entre HTMLCollection e NodeList?
R HTMLCollection é ao vivo — atualiza automaticamente quando o DOM muda; NodeList de querySelectorAll é um snapshot estático. Ao iterar e adicionar/remover elementos, uma coleção estática é mais segura, senão você pode entrar em loop infinito.
P O que acontece se você fizer appendChild de um nó que já existe?
R O nó "se move" da posição original para a nova posição. No DOM, o mesmo nó só pode aparecer uma vez. Isso é uma cópia, não uma movimentação.

📖 Resumo


📝 Exercícios

  1. Básico: Crie uma página que use createElement e appendChild para gerar dinamicamente uma lista contendo 5 nomes de cidades.
  2. Intermediário: Adicione um botão de exclusão à lista do exercício anterior. Quando clicado, use removeChild para excluir o item da lista correspondente.
  3. Desafio: Implemente um simples "gerenciador de notas" — um campo de input + botão de adicionar. Cada vez que você adicionar uma nota, crie um cartão com um botão de exclusão. Clicar no botão de exclusão remove aquele cartão.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%