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

Javascript Capítulo 5 ex 4

Boa tarde, eu estava fazendo esse exercício de uma forma diferente então ao olhar a resposta eu comecei a ver como funcionava do jeito do Leonardo e está tudo funcionando. Mas está retornando um erro no javascript: Uncaught TypeError: Cannot read property 'getElementsByClassName' of undefined na linha 54.

function montaPaciente(pacienteTemp){



    var nome = pacienteTemp.getElementsByClassName("info-nome")[0].textContent;
    var peso = pacienteTemp.getElementsByClassName("info-peso")[0].textContent;
    var altura = pacienteTemp.getElementsByClassName("info-altura")[0].textContent;


    var paciente = {
        "nome"   : nome,
        "peso"   : peso,
        "altura" : altura,
        pegaImc : function(){

            if (this.altura != 0){

                return peso / (altura * altura);

                // console.log(imc) // 25

            }else {
                console.log("Não se pode ter altura igual a 0");
            }

        }
    };

    return paciente;

}

var trsPacientes = document.getElementsByClassName("paciente"); //array de trs

//var pacientes = document.getElementsByClassName("paciente");

for(var posicaoAtual = 0; posicaoAtual <= trsPacientes.length; posicaoAtual++){

    var trDoPaciente = trsPacientes[posicaoAtual];


    var trDoImc = trDoPaciente.getElementsByClassName("info-imc")[0]; //LINHA DO ERRO
    var paciente = montaPaciente(trDoPaciente);
    var imc = paciente.pegaImc();
    trDoImc.textContent = imc;
    console.log(imc);
}

Mesmo com o erro o código funciona e coloca os imcs corretos na tabela. Mas como eu posso retirar esse erro?

4 respostas

Oi Felipe, a mensagem de erro está dizendo que não achou a class com e nome "info-imc", verifica se tem uma class com esse nome no teu html. Isso deve resolver

Tem essa classe sim, vem do html do material do curso. O código funciona, só que está dando esse erro.

solução!

o for está percorrendo um índice a mais, onde está

for(var posicaoAtual = 0; posicaoAtual <= trsPacientes.length; posicaoAtual++){

deve estar:

for(var posicaoAtual = 0; posicaoAtual < trsPacientes.length; posicaoAtual++){

ou

for(var posicaoAtual = 0; posicaoAtual <= trsPacientes.length - 1; posicaoAtual++){

lembre-se que um array começa na posição [0], por isso tem que percorrer o array menos uma posição.

traduzindo pra esse caso:

seu array tem 2 elementos

trsPacientes[0] => primeiro elemento
trsPacientes[1] => segundo elemento
trsPacientes[2] => não existe elemento.

porém no for você esta incluindo também a posição 2(posicaoAtual <= trsPacientes.length)

Era exatamente isso. Muito Obrigado João. Vou marcar a resposta do exercício para revisão, pois está lá e eu nem tinha reparado.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software