Prof. Pablo Werlang pablowerlang@ifsul.edu.br
<body> <h1>Minha página</h1> <p>Olá, turma.</p> </body>
Document Object Model
document
const titulo = document.querySelector('h1'); titulo.textContent = 'Novo título';
querySelector()
querySelectorAll()
const botao = document.querySelector('#btn-salvar'); const card = document.querySelector('.card');
null
const itens = document.querySelectorAll('.item'); itens.forEach((item) => { console.log(item.textContent); });
document.querySelector('#status'); document.querySelector('.card'); document.querySelector('button'); document.querySelector('nav a'); document.querySelector('ul > li'); document.querySelector('input[type="text"]');
#status
id
.card
button
nav a
nav
ul > li
li
ul
input[type="text"]
function highlightCard(card) { const titulo = card.querySelector('h3'); const botoes = card.querySelectorAll('button'); titulo.textContent = 'Produto em destaque'; botoes.forEach((botao) => { botao.disabled = true; }); } const allCards = document.querySelectorAll('.card'); allCards.forEach((card) => { card.addEventListener('click', () => highlightCard(card)); });
textContent
innerHTML
status.textContent = '<strong>Olá</strong>';
status.innerHTML = '<strong>Olá</strong>';
const campoNome = document.querySelector('#nome'); const destaque = document.querySelector('#destaque'); const botao = document.querySelector('#salvar'); console.log(campoNome.value); console.log(destaque.checked); botao.disabled = true;
value
checked
disabled
src
href
classList
const mensagem = document.querySelector('#status'); mensagem.classList.add('sucesso'); mensagem.classList.remove('oculto'); mensagem.classList.toggle('destaque');
style
add()
remove()
contains()
true
false
toggle()
Com innerHTML
lista.innerHTML += '<li class="item">Nova tarefa</li>';
Com createElement()
createElement()
const item = document.createElement('li'); item.textContent = 'Nova tarefa'; item.classList.add('item'); lista.append(item);
function newCard(nome, nota) { const card = ` <div class="card"> <h3>${nome}</h3> <p>Nota: ${nota}</p> </div> `; return card; } container.innerHTML += newCard('Ana', 8); container.innerHTML += newCard('Bruno', 6);
`
${variavel}
function addAviso(texto) { const aviso = document.createElement('div'); aviso.classList.add('aviso'); aviso.textContent = texto; document.body.append(aviso); } function removeAviso() { const aviso = document.querySelector('.aviso'); if (!aviso) return; // Evita erro se não existir aviso.remove(); }
append()
const nomes = ['Ana', 'Bruno', 'Carla']; function renderizarLista() { const lista = document.querySelector('#lista'); lista.innerHTML = ''; // Limpa a lista antes de renderizar nomes.forEach((nome) => { lista.innerHTML += `<li>${nome}</li>`; }); }
const alunos = [ { nome: 'Ana', nota: 8 }, { nome: 'Bruno', nota: 6 }, { nome: 'Carla', nota: 9 }, ];
function renderizarTabela() { const tabela = document.querySelector('#tabela'); tabela.innerHTML = ''; alunos.forEach((aluno) => { const row = document.createElement('tr'); row.innerHTML = ` <td>${aluno.nome}</td> <td>${aluno.nota}</td> `; tabela.append(row); }); }
Elemento inexistente
const caixa = document.querySelector('#nao-existe'); caixa.textContent = 'Teste';
Confusões frequentes
Ler nome, cor e destaque a partir do formulário
Atualizar um objeto de preferências e refletir isso no card da página
Treinar value, checked, textContent e classList
Bom para mostrar que DOM nem sempre significa criar elementos do zero
Veja um exemplo de como pode ficar
Criar cards a partir de objetos guardados em um array
Renderizar a galeria com base nos dados atuais
Remover cards e atualizar o contador visual
Excelente para fixar createElement(), append() e renderização
Cadastrar tarefas como objetos com texto e estado de conclusão
Marcar como concluída, remover e recalcular pendências
Fazer a classe visual refletir o estado real do array
Aqui eventos, objetos, arrays e DOM finalmente sentam na mesma mesa
Publicar, editar e remover postagens a partir de um array de objetos
Exibir cards com texto e data em formato local
Limpar tudo e reconstruir a tela sempre a partir do estado atual
É o exercício mais completo da seção e já tem cara de miniaplicação