
✍️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
F12para 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.htmle 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 umdivque tenha a classe.caixae 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.
innerHTMLvstextContent: Crie umadivvazia. Use JavaScript para adicionar o seguinte conteúdo nela usandoinnerHTML:<strong>Texto em negrito</strong>. Depois, crie outradive 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.destaqueque mude a cor de fundo. Faça com que o botão, ao ser clicado, adicione ou remova (toggle) a classe.destaquedo 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 atributosrcpara 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 umadivcom um parágrafo dentro. Selecione o parágrafo e, a partir dele, acesse e adicione uma borda vermelha aodivpai usando.parentNode.style.border.Acessando os Filhos (
children): Crie umadivcom três parágrafos dentro. Selecione adive use a propriedade.childrenpara 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
previousElementSiblingpara mudar o texto do primeiro botão enextElementSiblingpara mudar o texto do terceiro.Diferença entre
childrenechildNodes: Crie umadive inspecioneminhaDiv.childNodesno console. Observe que ele inclui nós de texto (espaços em branco, quebras de linha). Agora, inspecioneminhaDiv.childrene 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
addEventListenerpara ouvir o eventokeydown. Toda vez que uma tecla for pressionada dentro do campo, exiba a propriedadeevent.keyno console.Impedindo Comportamentos Padrão: Crie um link
<a>comhref="https://google.com". Adicione umaddEventListenerde 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 umadivcom 5 botões dentro. Adicione um únicoaddEventListenerde clique nadiv. Dentro da função, useevent.targetpara 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 umaddEventListenerde 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()noaddEventListenerdo 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 únicoaddEventListenernela. 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
removeEventListenerapó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.
Atualizado

