
✍️Mão na Massa
Exercícios Práticos: Mão na Massa com JavaScript e DOM!
Bloco 1: Fundamentos e Primeiros Passos (Exercícios 1-4)
Explorando o Console: Abra qualquer site (como https://www.google.com/search?q=google.com), pressione
F12
para abrir as Ferramentas de Desenvolvedor, vá até a aba "Console" e digiteconsole.log("Eu estou explorando a web!");
. Pressione Enter e veja o resultado.A Santíssima Trindade da Web: Com suas próprias palavras, explique a diferença entre HTML, CSS e JavaScript.
Primeira Página Interativa: Copie o código HTML com a função
mostrarMensagem()
do exemplo da página 7.1. Salve-o comoindex.html
e abra no navegador. Clique no botão e veja o alerta.O que é o DOM? Usando a analogia da casa de LEGO, explique o que é o DOM (Document Object Model) e por que ele é essencial para que o JavaScript possa interagir com uma página.
Bloco 2: Selecionando Elementos no DOM (Exercícios 5-9)
Seleção por ID: Crie uma página com um título
<h1>
que tenha oid="titulo-principal"
. Em uma tag<script>
, usedocument.getElementById("titulo-principal")
para selecionar o elemento e exibi-lo no console comconsole.log()
.Seleção por Classe: Crie uma lista não ordenada (
<ul>
) com três itens (<li>
), todos comclass="item-lista"
. Usedocument.getElementsByClassName("item-lista")
para selecionar todos os itens e veja no console o que é retornado (umaHTMLCollection
).Seleção por Tag: Na página do exercício anterior, use
document.getElementsByTagName("li")
para selecionar todos os itens da lista. Compare o resultado no console com o do exercício 6.O Poder do
querySelector
: Crie uma página com umdiv
que tenha a classe.caixa
e dentro dele um parágrafo<p>
com oid="texto-interno"
.Use
document.querySelector(".caixa")
para selecionar adiv
.Use
document.querySelector("#texto-interno")
para selecionar o parágrafo.Exiba ambos no console.
Seleção Múltipla com
querySelectorAll
: Na lista do exercício 6, usedocument.querySelectorAll(".item-lista")
para selecionar todos os itens. Observe que ele retorna umNodeList
, que é um pouco diferente e mais fácil de percorrer.
Bloco 3: Manipulando o DOM (Alterando Conteúdo e Estilos) (Exercícios 10-16)
Mudando Texto com
textContent
: Selecione o<h1>
do exercício 5 e, usando JavaScript, altere seu texto para "Página de Exercícios de DOM".Alterando Estilos com
.style
: Crie um parágrafo com oid="paragrafo-colorido"
. Use JavaScript para:Mudar a cor do texto para
blue
.Aumentar o tamanho da fonte para
22px
.Adicionar uma cor de fundo (
backgroundColor
) delightgray
.
innerHTML
vstextContent
: Crie umadiv
vazia. Use JavaScript para adicionar o seguinte conteúdo nela usandoinnerHTML
:<strong>Texto em negrito</strong>
. Depois, crie outradiv
e adicione o mesmo texto, mas usandotextContent
. Observe a diferença no navegador.Trabalhando com Classes (
classList
): Crie um botão e um parágrafo. Defina uma classe CSS chamada.destaque
que mude a cor de fundo. Faça com que o botão, ao ser clicado, adicione ou remova (toggle
) a classe.destaque
do parágrafo.Lendo Valores de Inputs: Crie um campo de texto (
<input type="text" id="campo-nome">
) e um botão. Crie uma função que, ao clicar no botão, exiba no console o valor (.value
) que foi digitado no campo de texto.Criando e Adicionando Elementos: Crie um botão "Adicionar Imagem". Quando o botão for clicado, crie um novo elemento
<img>
viadocument.createElement("img")
, defina seu atributosrc
para uma URL de imagem qualquer e adicione-o ao final do<body>
da página usandodocument.body.appendChild()
.Removendo Elementos: Crie uma lista com 5 itens. Adicione um botão que, ao ser clicado, remove (
.remove()
) o último item da lista.
Bloco 4: Navegando pela Árvore DOM (Exercícios 17-20)
Acessando o Pai (
parentNode
): Crie umadiv
com um parágrafo dentro. Selecione o parágrafo e, a partir dele, acesse e adicione uma borda vermelha aodiv
pai usando.parentNode.style.border
.Acessando os Filhos (
children
): Crie umadiv
com três parágrafos dentro. Selecione adiv
e use a propriedade.children
para acessar o segundo parágrafo e mudar seu texto.Navegando entre Irmãos: Crie três botões, um ao lado do outro. Selecione o segundo botão. Use
previousElementSibling
para mudar o texto do primeiro botão enextElementSibling
para mudar o texto do terceiro.Diferença entre
children
echildNodes
: Crie umadiv
e inspecioneminhaDiv.childNodes
no console. Observe que ele inclui nós de texto (espaços em branco, quebras de linha). Agora, inspecioneminhaDiv.children
e veja que ele retorna apenas os elementos HTML. Anote a diferença.
Bloco 5: Eventos (Básico e Avançado) (Exercícios 21-27)
Ouvindo Eventos de Teclado: Crie um campo de texto. Use
addEventListener
para ouvir o eventokeydown
. Toda vez que uma tecla for pressionada dentro do campo, exiba a propriedadeevent.key
no console.Impedindo Comportamentos Padrão: Crie um link
<a>
comhref="https://google.com"
. Adicione umaddEventListener
de clique que usaevent.preventDefault()
para impedir que o navegador vá para o Google e, em vez disso, exiba um alerta dizendo "Navegação bloqueada!".Entendendo o
event.target
: Crie umadiv
com 5 botões dentro. Adicione um únicoaddEventListener
de clique nadiv
. Dentro da função, useevent.target
para descobrir exatamente qual dos 5 botões foi clicado e exiba seu texto no console.Demonstração de Event Bubbling: Crie uma
div
(pai) com umbutton
(filho) dentro. Adicione umaddEventListener
de clique em ambos. Cada um deve exibir uma mensagem diferente no console (ex: "Clique no PAI" e "Clique no FILHO"). Clique no botão e observe que as duas mensagens aparecem. Isso é o bubbling em ação.Parando a Propagação: Modifique o exercício anterior. Use
event.stopPropagation()
noaddEventListener
do botão (filho) para impedir que o clique "borbulhe" para o pai. Agora, ao clicar no botão, apenas a mensagem do filho deve aparecer.Delegação de Eventos (Event Delegation): Crie uma lista
<ul>
e use um únicoaddEventListener
nela. A função deve verificar se oevent.target
é um<li>
e, se for, mudar a cor do texto do item clicado para vermelho. Isso é muito mais eficiente do que adicionar um listener para cadali
.Removendo um Event Listener: Crie um botão que, na primeira vez que for clicado, exiba um alerta "Olá!". Na segunda vez, nada deve acontecer. Dica: você precisará nomear sua função de evento para poder removê-la com
removeEventListener
após a primeira execução.
Bloco 6: Mini-Projetos de Integração (Exercícios 28-30)
Mini-Projeto: Lista de Tarefas (To-Do List):
Crie um campo de texto (
<input>
) e um botão "Adicionar".Ao clicar no botão, pegue o texto do input, crie um novo item de lista (
<li>
), e adicione-o a uma<ul>
na página.Use a delegação de eventos para que, ao clicar em um
<li>
, ele seja marcado como concluído (ex: riscando o texto comtext-decoration: line-through
).(Bônus) Adicione um pequeno botão "X" em cada
<li>
que, ao ser clicado, remove a tarefa da lista.
Mini-Projeto: Contador Simples:
Crie um
<h2>
que começa com o número 0.Crie dois botões: "+" e "-".
Faça o botão "+" incrementar o número no
<h2>
e o botão "-" decrementá-lo.
Mini-Projeto: Buscando Dados com
fetch
:Use a API de teste
https://jsonplaceholder.typicode.com/users/1
.Crie um botão "Buscar Usuário".
Ao clicar, use a função
fetch()
para buscar os dados dessa URL.Quando os dados chegarem (
.then()
), exiba o nome (name
) e o email (email
) do usuário em parágrafos na sua página.
Last updated