Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Parametros nas funções

Boa tarde estou quebrando a cabeça para entender bem a questão dos parâmetros pq nesse caso eu pego apenas a altura e o peso do primeiro paciente ?

var pacientes = document.querySelectorAll(".paciente");

pacientes.forEach(function(){
    var peso = document.querySelector(".info-peso");
    var altura = document.querySelector(".info-altura");
    console.log(peso)
    console.log(altura)
});

E pq quando passo esses parametros eu consigo acessar todos ?

var pacientes = document.querySelectorAll(".paciente");

pacientes.forEach(function(){
    var peso = document.querySelector(".info-peso");
    var altura = document.querySelector(".info-altura");
    console.log(peso)
    console.log(altura)
});
3 respostas

Olá Yuri!

Desculpa mas não entendi, ambos os códigos estão semelhantes.

Quando você faz:

var pacientes = document.querySelectorAll(".paciente");

Você está pegando todos os paciente que usam a classe .paciente e criando um vetor com eles.

Quando você usa o:

pacientes.forEach(function(){ ...

Você está iterando sobre cada paciente e pegando seu peso e altura especificos.

Fica algo como:

paciente[0].getPeso
paciente[0].getAltura

paciente[1].getPeso
paciente[1].getAltura

paciente[2].getPeso
paciente[2].getAltura

...

Desculpa,esse no caso seria o segundo código,passando esse parametro (qualquercoisa) eu consigo acessar os dados e calcular tranquilamente o IMC, mas se eu passar sem o paramentro e colocar document.querySelector ele só pega o primeiro.

var pacientes = document.querySelectorAll(".paciente");

pacientes.forEach(function(qualquercoisa){
    var pesoTd = qualquercoisa.querySelector(".info-peso");
    var peso = pesoTd.textContent
    var alturaTd = qualquercoisa.querySelector(".info-altura");
    var altura = alturaTd.textContent    
    var imcTd = qualquercoisa.querySelector(".info-imc");
    var imc = peso / (altura * altura)
    imcTd.textContent = imc.toFixed(2);

    var pesoValido = true;
    var alturaValida = true;

    if (peso <= 0 || peso >= 500) {
        pesoValido = false;
        paciente.classList.add("paciente-invalido");
        imcTd.textContent = "Peso Inválido!!";
    }

    if (altura <= 0 || altura >= 3.0) {
        alturaValida = false;
        paciente.classList.add("paciente-invalido");
        imcTd.textContent = "Altura inválida!!";
    }

});


solução!

Olá Yuri!

Nosso HTML é uma estrutura cheia de hierarquias.

O forEach é uma estrutura que percorre listas de forma inteligente.

Esse atributo que passamos na função é equivalente ao elemento que está sendo selecionado nesse forEach, ou seja, ele é dinamico.

Pra ficar mais claro tentarei exemplificar:

linguagens = ["java", "c#", "python", "elixir"];

linguagens.forEach(function(linguagem){
    console.log(linguagem);
});

Repara que esse parametro "linguagem" representa cada elemento do nosso array. Na primeira passada ele ira printar no console "java", depois "C#" e assim sucessivamente.

Isso quer dizer que o seu atributo "qualquerCoisa" na verdade representa cada paciente que seu script encontrou na hierarquia do HTML.

Ele cria um vetor e você percorre ele, por isso que funciona dessa forma.

pacientes.forEach(function(paciente){

Já quando usamos o document.QuerySelector e não temos essa referencia dos outros elementos e por isso ele retorna só o primeiro.

Espero que tenha ajudado! ^^

Bons estudos! :D