Hola Jhonatan, espero que estés bien.
Estamos muy felices por tu aprendizaje. Excelente tu solución, sólo te recomendamos que copie y pegue tu código aquí en el foro así podremos testarlo nosotros también. Para compartir un código, haz clic en este botón aquí y escreba tu código dentro de el:
Continúa con tus estudios y cualquier duda estaremos aquí.
let pacientes = document.querySelectorAll(".paciente");
let form = document.querySelector(".form");
let btn_agregar = form.querySelector("#adicionar-paciente");
let tbody = document.querySelector("#tabla-pacientes");
btn_agregar.addEventListener("click", (e) => {
e.preventDefault();
let paciente = {
nombre : form.nombre.value,
peso : form.peso.value,
altura : form.altura.value,
gordura : form.gordura.value
}
crearHtml(paciente);
});
function crearHtml(paciente) {
let ul = document.querySelector("#mensajes-errores");
ul.innerHTML = "";
let errores = validarPacientes(paciente);
if(errores.length > 0){
mensajeErrores(errores);
return;
}
//Creacion de elementos
let tr = document.createElement("tr");
tr.classList.add("paciente");
let td_nombre = document.createElement("td");
let td_peso = document.createElement("td");
let td_altura = document.createElement("td");
let td_gordura = document.createElement("td");
let td_imc = document.createElement("td");
//Asignacion de estilo al tr
//Obtengo el calculo del imc
let imc = calcular_imc(paciente.peso, paciente.altura).toFixed(2);
//Asigno los valores a los td creados
td_nombre.textContent = paciente.nombre;
td_peso.textContent = paciente.peso;
td_altura.textContent = paciente.altura;
td_gordura.textContent = paciente.gordura;
td_imc.textContent = imc;
//agrego los td al tr
tr.appendChild(td_nombre);
tr.appendChild(td_peso);
tr.appendChild(td_altura);
tr.appendChild(td_gordura);
tr.appendChild(td_imc);
// Se agrega el tr al tbody
tbody.appendChild(tr);
form.reset();
}
function obtener_imc() {
for (let i = 0; i < pacientes.length; i++) {
let validacion = true;
let td_peso = pacientes[i].querySelector(".info-peso");
let td_altura = pacientes[i].querySelector(".info-altura");
let info_imc = pacientes[i].querySelector(".info-imc");
let peso = parseInt(td_peso.textContent);
let altura = parseInt(td_altura.textContent);
let peso_valido = validar_peso(peso);
let altura_valida = validar_altura(altura);
if (!peso_valido) {
info_imc.innerHTML = "Peso incorrecto";
validacion = false;
}
if (!altura_valida) {
info_imc.innerHTML = "Altura incorrecta";
validacion = false;
}
if (validacion) {
let imc = calcular_imc(peso, altura);
info_imc.innerHTML = imc.toFixed(2);
} else {
pacientes[i].classList.add("paciente-incorrecto");
}
}
}
function calcular_imc(peso, altura) {
return peso / (altura * altura);
}
function validar_peso(peso){
if (peso <= 0 || peso >= 150) {
return false;
}
return true;
}
function validar_altura(altura){
if (altura <= 0 || altura >= 2.30) {
return false;
}
return true;
}
function validarPacientes(paciente){
let errores = [];
if (paciente.peso <= 0 || paciente.peso >= 150) {
errores.push('Peso incorrecto');
}
if (paciente.altura <= 0 || paciente.altura >= 3) {
errores.push('Altura incorrecta');
}
if (paciente.nombre.length <= 0) {
errores.push('Ingrese el nombre');
}
if (paciente.peso.length <= 0) {
errores.push('Ingrese el peso');
}
if (paciente.altura.length <= 0) {
errores.push('Ingrese la altura');
}
if (paciente.gordura.length <= 0) {
errores.push('Ingrese el porcentaje de gordura');
}
return errores;
}
function mensajeErrores(errores){
let ul = document.querySelector("#mensajes-errores");
errores.forEach(error => {
let li = document.createElement('li');
li.textContent = error;
ul.appendChild(li);
});
}
obtener_imc();