<label for="numero-de-pasteis">Pastéis: </label>
<input type="number" value="1" id="numero-de-pasteis"> <!-- não fecha! -->
<button id="calcular">Calcular Conta</button>
<button>, é necessário
usar JavaScript<script src="arquivo.js"></script> :thumbsup:<script>...</script> :thumbsdown:onclick :thumbsdown::thumbsdown::thumbsdown:document:
// cria uma variável e recupera o elemento da logo (id="logomarca")
let logoEl = document.querySelector('#logomarca');
// atribui um evento de 'click' ao elemento da logo
logoEl.addEventListener('click', function() {
alert('Logo clicada!!'); 👹
});
String char como em C/C++ e Java, apenas string :wink:"Abc" === 'Abc' // simples é mais legal!! mas basta ser consistente
length com o seu comprimento:
console.log('Cachorro'.length); // 8
let aranhas = 'fofofauna';
const caminhoVideo = 'videos/a.mp4';
const nomeCompleto = primeiro + ' ' + ultimo; // concatenou
// template string
let fruta = `Kiwi`;
// string normal
let fruta = 'Kiwi';
const peso = 82;
const nome = 'Kagaro Nakama';
// com template strings
const frase = `${nome} pesa ${peso}kg`;
// "Kagaro Nakama pesa 82kg"
const peso = 82;
const nome = 'Kagaro Nakama';
// concatenando strings normais
const frase = nome + ' pesa ' + peso + 'kg';
// "Kagaro Nakama pesa 82kg"
${...}. Exemplo:
// supondo que existem variáveis preco=5 e qtde=2
let aConta = `Sua conta é R$ ${preco * qtde - 3}`;
// "Sua conta é R$ 7"
// supondo variáveis dia, mês, ano e func. obtemMes
const data = `${dia} de ${obtemMes(mes)} de ${ano}`;
// Ex: "20 de janeiro de 2021"
const tom = 128;
const corCinza = `rgb(${tom}, ${tom}, ${tom})`;
// Ex: "rgb(128, 128, 128)"
console.log(typeof "texto"); // imprime "string"
console.log(typeof `texto`); // imprime "string"
// com template string
let poesia = `Cavei cavei cavei
Isto não é um poema
Mas é profundo.`;
// com string normal
let poesia = 'Cavei cavei cavei\n' +
'Isto não é um poema\n' +
'Mas é profundo.';
\n dentro da template string function cadastrar() {
// ...
}
const cadastrar = function() {
// ...
};
const cadastrar = () => {
// ...
};
functionreturn implícitothis function ciao() {
return 'Ciao';
}
function oi(prim, ult) {
return 'Oi ' + prim + ' ' + ult;
}
function hi(name) {
return 'Hi ' + name;
}
function fatorial(n) {
let resultado = 1;
while (n > 1) {
resultado *= n;
n--;
}
return resultado;
}
let ciao = () => 'Ciao';
let oi = (prim, ult) => 'Oi ' + prim + ' ' + ult;
let hi = name => 'Hi ' + name;
let fatorial = n => {
let resultado = 1;
while (n > 1) {
resultado *= n;
n--;
}
return resultado;
}
let usuarios = ['Joel', 'Fani', 'Fúlvio'];
let alunos = [{ matricula: '...' }];
let numeros = [1, 4, 2, 5];
usuarios.filter(function(nome) {
return nome.startsWith('F');
});
usuarios.filter(nome => nome.startsWith('F'));
alunos.find(function(aluno) {
return aluno.matricula === '2005046102';
});
alunos.find(al => al.matricula === '2005046102');
numeros.map(function(numero) {
return numero ** 2;
});
numeros.map(numero => numero ** 2);
document.querySelector()document.querySelector(seletor) permite que, a partir de um código
JavaScript, recuperemos um elemento do DOM
let logoEl = document.querySelector('#logomarca');
let tabelaEl = document.querySelector('#tesouros-pirata');
let principalEl = document.querySelector('main');
document.querySelectorAll(seletor) (repare o all),
que retorna mais de um elemento, mas veremos ele depoisdocument.querySelector retorna apenas 1 elemento
document.querySelectorAll retorna todos que forem selecionados:
let inputs = document.querySelectorAll('input'); // retornou um 'NodeList'
// com todos inputs da página
console.log(`Quantidade de inputs na página: ${inputs.length}`);
let primeiroInputEl = inputs[0];
let imagens = document.querySelectorAll('img'); // retornou um 'NodeList'
// INCORRETO: um NodeList não possui um método "addEventListener"
imagens.addEventListener('click', function() { });
// CORRETO: cada item do NodeList (array) é um elemento HTML, logo,
// possui a propriedade "addEventListener"
for (let i = 0; i < imagens.length; i++) {
imagens[i].addEventListener('click', function() { });
}
Um NodeList é “praticamente um array“ - ele possui os métodos essenciais:
let inputs = document.querySelectorAll('input'); // inputs é um 'NodeList'
// propriedade .length (igual um array)
console.log(`Quantidade de elementos: ${inputs.length}`);
// método 'forEach' (igual um array)
inputs.forEach(function(el) {
// ...
});
// pegando um elemento como se fosse um array
let primeiroEl = inputs[0];
NodeList vs VetorNodeList é praticamente um array, mas não possui todos os métodos. Por exemplo:
umNodeList.length ✅
umNodeList[5] ✅
umNodeList.forEach(...) ✅
umNodeList.indexOf(...) ❌
umNodeList.sort() ❌
umNodeList.reverse() ❌
umNodeList.filter() ❌
umNodeList.find() ❌
umVetor.length ✅
umVetor[5] ✅
umVetor.forEach(...) ✅
umVetor.indexOf(...) ✅
umVetor.sort() ✅
umVetor.reverse() ✅
umVetor.filter() ✅
umVetor.find() ✅
NodeList em um vetor, usevetor = Array.from(umNodeList):
let todosParagrafos = document.querySelectorAll('p'); // é um 'NodeList'
todosParagrafos = Array.from(todosParagrafos); // agora é um 'Array'
document dá acesso ao Document Object Model, ou DOMid e colocá-lo em
uma variável:
let botaoDeliciaEl = document.querySelector('#botao-delicia');
<img src="bob-esponja.png">
<img>, o atributo src="..." aponta para a URL do arquivo<img src = "..."> :thumbsdown:<img src="..."> :thumbsup:É possível alterar o conteúdo de um elemento com elemento.innerHTML:
let contador = 0;
let contadorEl = document.querySelector('#contador');
// quando clicado, (1) conta e (2) altera conteúdo
contadorEl.addEventListener('click', () => {
contador++; // (1) conta
contadorEl.innerHTML = contador; // (2) altera
});
<img src="imgs/pikachu.png" id="pokemon-lutando">
let pokemonEl = document.querySelector('#pokemon-lutando');
pokemonEl.src = 'imgs/bulbasaur.png'; // alteramos o 'src'
src da img, mas poderia ser qualquer um
input costumamos pegar/alterar o value
inputEl.value = 'novo valor';
botaoEl.classList.add('selecionado'); // coloca .selecionado
imageEl.classList.remove('oculta'); // remove .oculta
pEl.classList.toggle('expandido'); // coloca ou tira .expandido
Isso pode ser usado, por exemplo, para ↘
“marcar” elementos
'click' de cada um:
.selecionado do elemento que foi “clicado”
el.classList.toggle('selecionado')'click' de cada um:
.selecionado de todos<body>
<nav id="menu">...</nav>
<main>...</main>
</body>
.menu-visivel no <body><body> tem .menu-visivel'click' em TODOS os parágrafos
<p>Parágrafo 1</p>
<p>Parágrafo 2</p>
<p>Parágrafo 3</p>
Parágrafo 1
Parágrafo 2
Parágrafo 3
function colore() {
let el = ??; // <-- quem colocar aqui??
el.style.background = 'lightblue';
};
let ps = document.querySelectorAll('p');
for (let pEl of ps) {
pEl.addEventListener('click', colore);
}
e, evt ou event:
let ps = document.querySelectorAll('p'); // igualzinho antes!
for (let pEl of ps) {
pEl.addEventListener('click', colore);
}
function colore(e) { // repare o argumento 'e' (evento)
let el = e.currentTarget; // <--- o elemento "alvo" do evento
el.style.background = 'lightblue'; // colore parágrafo alvo do evento
}
elemento.parentNode ou elemento.parentElement)elemento.childNodes ou elemento.children)<img> , mas quero a <div></div> que é “pai” dela:
function clicouNaImagem(e) {
let clicadoEl = e.currentTarget; // a <img> que foi clicada
let divEl = clicadoEl.parentNode; // <--- <div> é o pai da <img>
console.log(divEl.id); // imprime id da div
}
let imgEl = document.querySelector('div > img');
imgEl.addEventListener('click', clicouNaImagem);
elemento.classList.toggle('nome-da-classe')true se tiver colocado a classefalse se tiver removido a classe
let colocou = booEl.classList.toggle('selecionado');
console.log(colocou); // imprime 'true', porque adicionou .selecionado
colocou = booEl.classList.toggle('selecionado');
console.log(colocou); // imprime 'false', porque tirou .selecionado