1 Commits

Author SHA1 Message Date
Juanse Marquez
52c3871b2b Solución ejercicio 9 2026-06-01 18:48:46 -03:00
12 changed files with 333 additions and 162 deletions

View File

@@ -1,18 +1 @@
// Agregar aquí el código javascript // Agregar aquí el código javascript
// Crear una página con un campo de texto y un botón. Al hacer clic en el botón,
// leer el valor del campo y mostrar en la página el mensaje `"Hola, [nombre]!"`.
// Si el campo está vacío, mostrar en su lugar `"Por favor, ingresá tu nombre."`.
let saludo = document.querySelector("#saludo");
let boton = document.querySelector("#enviar");
let form = document.querySelector("form");
let nombre = document.querySelector("#input-nombre");
form.addEventListener("submit", (e) => {
e.preventDefault();
if (nombre.value.trim() === ""){
saludo.textContent = "Por favor, ingresá tu nombre.";
} else {saludo.textContent = `Hola ${nombre.value}!`}
})

View File

@@ -8,13 +8,6 @@
</head> </head>
<body> <body>
<h1>Ejercicio 1</h1> <h1>Ejercicio 1</h1>
<p>Ingrese su nombre</p>
<form action="">
<label for="input-nombre"></label>
<input type="text" name="input-nombre" id="input-nombre">
<button type="submit" id="enviar-form">ver</button>
</form>
<p id="saludo"></p>
<script src="ejercicio1.js"></script> <script src="ejercicio1.js"></script>
</body> </body>

View File

@@ -1,21 +1 @@
// Agregar aquí el código javascript // Agregar aquí el código javascript
// Crear una página con un campo de texto y un botón "Agregar". Cada vez que se
// haga clic en el botón, agregar el texto del campo como un nuevo ítem en una
// lista `<ul>`. Después de agregar el ítem, limpiar el campo.
// Si el campo está vacío al hacer clic, no agregar nada.
let input = document.querySelector("input") //almacenamos en variables el boton, el input y la lista
let boton = document.querySelector("button");
let lista = document.querySelector("ul")
boton.addEventListener("click", ()=>{ // creamos el listener "click" con la funcion
if (!(input.value.trim() === "")){ // si el input NO ESTÁ vacio, continuamos :
nuevoLi = document.createElement("li"); //creamos el li ,
nuevoLi.textContent = input.value.trim(); // le damos contenido ,
lista.appendChild(nuevoLi); // lo anexamos a la lista ,
input.value = ""; // y vaciamos el input :)
}
})
// fin

View File

@@ -8,13 +8,7 @@
</head> </head>
<body> <body>
<h1>Ejercicio 2</h1> <h1>Ejercicio 2</h1>
<p>escriba un texto para agregar a la lista</p>
<br>
<input type="text" name="input" id="input">
<button id="boton-agregar">Agregar</button>
<br>
<ul>
</ul>
<script src="ejercicio2.js"></script> <script src="ejercicio2.js"></script>
</body> </body>
</html> </html>

View File

@@ -1,15 +1 @@
// Agregar aquí el código javascript // Agregar aquí el código javascript
// Crear una lista con al menos seis ítems de cualquier contenido. Al hacer clic
// en un ítem, agregarle la clase `"seleccionado"`. Al hacer clic de nuevo sobre
// el mismo ítem, quitarle la clase.
// Usar delegación de eventos, incluyendo un solo listener en la lista, no uno por
// ítem.
let lista = document.querySelector("ul");
lista.addEventListener("click", (e)=>{
e.target.classList.toggle("defensor-elegido"); //usamos el toggle para agregar/sacar la clase defensor-elegido
console.log(e.target.classList)
})

View File

@@ -8,15 +8,7 @@
</head> </head>
<body> <body>
<h1>Ejercicio 3</h1> <h1>Ejercicio 3</h1>
<p>Defensores convocados</p>
<ul>
<li class="defensor">Romero</li>
<li class="defensor">Senesi</li>
<li class="defensor">Tagliafico</li>
<li class="defensor">Molina</li>
<li class="defensor">Barco</li>
<li class="defensor">Martinez</li>
</ul>
<script src="ejercicio3.js"></script> <script src="ejercicio3.js"></script>
</body> </body>
</html> </html>

View File

@@ -1,34 +1 @@
// Agregar aquí el código javascript // Agregar aquí el código javascript
// Crear una página con tres elementos: un botón "Sumar", un botón "Restar" y un
// párrafo que muestre el valor actual del contador, empezando en `0`.
// Requisitos:
// - El contador no puede bajar de `0` ni subir de `10`.
// - Cuando el contador llega a `10`, el botón "Sumar" se deshabilita.
// - Cuando el contador llega a `0`, el botón "Restar" se deshabilita.
// - Al volver a un valor intermedio, los botones se vuelven a habilitar.
let botonSumar = document.querySelector("#botonSumar");
let botonRestar = document.querySelector("#botonRestar");
let numero = document.querySelector("#numero");
botonSumar.addEventListener("click", (e)=>{
if(numero.textContent < 9){ // siempre que numero < 9 queremos que se ejecute el codigo (supongamos numero = 8)
++numero.textContent; // numero = 9
botonRestar.disabled = false; //habilitamos el restar en caso de que no esté habilitado
} else if (numero.textContent == 9) { // solamente en caso de numero = 9 se ejecuta este else if
++numero.textContent; // numero = 10
botonSumar.disabled = true; // ya no queremos seguir sumando, ergo, desactivamos el boton sumar
}
})
botonRestar.addEventListener("click", (e)=>{
if(numero.textContent > 1){ // supongamos que en esta instancia numero = 2
--numero.textContent; // // ahora numero = 1
botonSumar.disabled = false // (esta linea la ejecutamos por las dudas para asegurarnos de que se vuelva a habilitar al boton sumar en caso de estar desabilitado, pero solo seria necesaria si numero = 10)
} else if (numero.textContent == 1) {
--numero.textContent; // ahora numero = 0
botonRestar.disabled = true; // por lo tanto desabilitamos el boton
}
})

View File

@@ -8,9 +8,7 @@
</head> </head>
<body> <body>
<h1>Ejercicio 4</h1> <h1>Ejercicio 4</h1>
<button id="botonRestar" disabled="true">Restar (-)</button> <!-- desabilitamos el botonRestar de entrada, ya que empezamos en 0 -->
<button id="botonSumar">Sumar (+)</button>
<p>contador: <span id="numero">0</span></p>
<script src="ejercicio4.js"></script> <script src="ejercicio4.js"></script>
</body> </body>
</html> </html>

View File

@@ -1,50 +1 @@
// Agregar aquí el código javascript // Agregar aquí el código javascript
// Dado un array de países (al menos diez), construir dinámicamente una lista en
// la página con todos ellos. Es decir: la lista de países no debe estar en el
// archivo html, sino como array en javascript, y a partir de este array se debe
// generar la lista.
// Agregar un campo de texto arriba de la lista para búsqueda. A
// medida que el usuario escribe, mostrar solo los países cuyo nombre contenga el
// texto ingresado (sin distinguir mayúsculas de minúsculas). Si el campo está
// vacío, mostrar todos.
// En ningún momento debemos modificar el array original, sino ir reconstruyendo
// la lista en el DOM con cada cambio del campo de búsqueda.
// CREACION DE LA LISTA
//creamos las siguientes variables
let arrayPaises = ["Venezuela", "Jamaica", "Dinamarca", "Mongolia", "Singapur", "Vietnam", "Letonia", "Escocia", "Congo", "Argelia"] ; // array con los paises
let arrayPaisesMinusculas = arrayPaises.map(pais=>pais.toLowerCase()) //pasamos la lista a minusculas para evitar incompatibilidades
let ulPaises = document.createElement("ul"); // cramos la UL (hasta ahora sin items)
let input = document.createElement("input"); //creamos el input
let body = document.querySelector("body"); // asignamos a esta variable la etiqueta "body"
body.appendChild(input); // incorporamos el input al body
body.appendChild(ulPaises); // lo mismo con la UL vacia
//IMPORTANTE: este for se ececutara una sola vez al cargar la pagina para crear la lista
for (let pais of arrayPaises){ // recorremos los 10 paises originales con un "for"
let liPais = document.createElement("li") //creamos el li
liPais.textContent = pais // lo llenamos con el pais iterado de la lista
ulPaises.appendChild(liPais) // y lo anexamos a la UL
}
input.addEventListener("keyup", () => { //creamos el listener que va a activase con cada "keyup" dentro del input
ulPaises.innerHTML = ""; // lo primero que hace el listener es borrar la lista para que no se repitan los elementos que queremos agregar
let busqueda = input.value.trim().toLocaleLowerCase() //texto ingresado en el input sin espacios y convertido a minusculas
let arrayPaisesMin = arrayPaises.map(p => p.toLocaleLowerCase()) // convertimos la lista de paises en minusculas
let arrayPaisesBusqueda = arrayPaisesMin.filter(pais => pais.includes(busqueda)); // almacenamos en variable los strings del array que coincidan con la busqueda
for (let p of arrayPaisesBusqueda){ // iteramos las lista que contiene solamente los paises que coinciden con el input
let liPais = document.createElement("li"); //creamos el li
liPais.textContent = p.charAt(0).toUpperCase() + p.slice(1) ; // lo rellenamos con el pais iterado de la lista ya capitalizado
// (aclaracion: la siguiente linea de codigo "charAt(0).toUpperCase() + p.slice(1)" es una forma de capitalizar la palabra, equivalente al metodo capitalize() que se encuentra en python)
ulPaises.appendChild(liPais) // lo anexamos
}
})

View File

@@ -1 +1,133 @@
// Agregar aquí el código javascript const preguntas = [
{
pregunta: "¿Cuál es la diferencia entre let y const?",
opciones: [
"No hay diferencia, son equivalentes",
"let permite reasignar el valor, const no",
"Depende del tipo de datos",
"let solo funciona dentro de funciones"
],
correcta: 1
},
{
pregunta: "¿Qué retorna querySelector si no encuentra ningún elemento?",
opciones: ["undefined", "false", "null", "0"],
correcta: 2
},
{
pregunta: "¿Qué hace el método filter?",
opciones: [
"Modifica los elementos del array original",
"Retorna el primer elemento que cumple la condición",
"Retorna un nuevo array con los elementos que cumplen la condición",
"Elimina elementos duplicados del array"
],
correcta: 2
},
{
pregunta: "¿Cuál es el operador de igualdad estricta en JavaScript?",
opciones: ["=", "==", "===", "!="],
correcta: 2
},
{
pregunta: "¿Para qué sirve event.preventDefault()?",
opciones: [
"Detiene la propagación del evento hacia elementos padre",
"Evita el comportamiento por defecto del navegador",
"Elimina el event listener del elemento",
"Pausa la ejecución del código hasta que el evento termine"
],
correcta: 1
}
];
let indiceActual = 0;
let puntaje = 0;
const pantalla = document.querySelector("#pantalla-quiz");
const resultadoEl = document.querySelector("#resultado");
const preguntaEl = document.querySelector("#pregunta");
const opcionesEl = document.querySelector("#opciones");
const feedbackEl = document.querySelector("#feedback");
const btnSiguiente = document.querySelector("#siguiente");
const progresoEl = document.querySelector("#progreso");
const progressFill = document.querySelector("#progress-fill");
const puntajeNumEl = document.querySelector("#puntaje-num");
const resultadoMsg = document.querySelector("#resultado-msg");
const btnReiniciar = document.querySelector("#reiniciar");
function mensajeFinal(p, total) {
if (p === total) return "¡Perfecto! Todo bien.";
if (p >= total * 0.8) return "¡Muy bien!";
if (p >= total * 0.6) return "Bien, pero hay margen para mejorar.";
return "Vale la pena repasar los temas.";
}
function mostrarPregunta() {
const actual = preguntas[indiceActual];
// Actualizamos el encabezado y la barra de progreso.
progresoEl.textContent = `${indiceActual + 1} / ${preguntas.length}`;
progressFill.style.width = `${(indiceActual / preguntas.length) * 100}%`;
preguntaEl.textContent = actual.pregunta;
opcionesEl.innerHTML = "";
feedbackEl.textContent = "";
btnSiguiente.style.display = "none";
for (let i = 0; i < actual.opciones.length; i++) {
const boton = document.createElement("button");
boton.className = "opcion";
boton.textContent = actual.opciones[i];
boton.addEventListener("click", () => responder(i));
opcionesEl.appendChild(boton);
}
}
function responder(indiceRespuesta) {
const actual = preguntas[indiceActual];
const botones = opcionesEl.querySelectorAll(".opcion");
// Deshabilitamos todos los botones para que no se pueda responder dos veces.
for (const boton of botones) {
boton.disabled = true;
}
if (indiceRespuesta === actual.correcta) {
botones[indiceRespuesta].classList.add("correcta");
feedbackEl.textContent = "¡Correcto!";
puntaje++;
} else {
botones[indiceRespuesta].classList.add("incorrecta");
botones[actual.correcta].classList.add("correcta");
feedbackEl.textContent = `Incorrecto. La correcta era: "${actual.opciones[actual.correcta]}"`;
}
btnSiguiente.style.display = "inline-block";
}
btnSiguiente.addEventListener("click", () => {
indiceActual++;
if (indiceActual < preguntas.length) {
mostrarPregunta();
} else {
// Actualizamos la barra al 100% antes de mostrar el resultado.
progressFill.style.width = "100%";
pantalla.style.display = "none";
resultadoEl.style.display = "block";
puntajeNumEl.textContent = `${puntaje} / ${preguntas.length}`;
resultadoMsg.textContent = mensajeFinal(puntaje, preguntas.length);
}
});
btnReiniciar.addEventListener("click", () => {
indiceActual = 0;
puntaje = 0;
resultadoEl.style.display = "none";
pantalla.style.display = "block";
mostrarPregunta();
});
mostrarPregunta();

View File

@@ -1,2 +1,168 @@
/* Agregar el código CSS necesario para el ejercicio */ /* Hoja de estilo realizada con IA */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
body {
font-family: system-ui, sans-serif;
background: #f5f4f0;
color: #1a1a1a;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 2rem;
}
.card {
background: #fff;
border: 0.5px solid #ddd;
border-radius: 16px;
padding: 2rem;
width: 100%;
max-width: 520px;
}
/* ── Encabezado ── */
.quiz-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 1.5rem;
}
.quiz-title {
font-size: 0.7rem;
font-weight: 500;
color: #888;
text-transform: uppercase;
letter-spacing: 0.06em;
}
.quiz-progress {
font-size: 0.75rem;
color: #aaa;
}
/* ── Barra de progreso ── */
.progress-bar {
height: 4px;
background: #eee;
border-radius: 2px;
margin-bottom: 2rem;
overflow: hidden;
}
.progress-fill {
height: 100%;
background: #1a1a1a;
border-radius: 2px;
transition: width 0.3s ease;
}
/* ── Pregunta ── */
#pregunta {
font-size: 1.05rem;
font-weight: 500;
line-height: 1.5;
margin-bottom: 1.5rem;
min-height: 3rem;
}
/* ── Opciones ── */
#opciones {
display: flex;
flex-direction: column;
gap: 8px;
margin-bottom: 1.5rem;
}
.opcion {
width: 100%;
text-align: left;
padding: 12px 16px;
background: #f5f4f0;
border: 0.5px solid #ddd;
border-radius: 8px;
font-size: 0.875rem;
color: #1a1a1a;
cursor: pointer;
transition: background 0.15s, border-color 0.15s;
}
.opcion:hover:not(:disabled) {
background: #edecea;
border-color: #bbb;
}
.opcion:disabled { cursor: default; }
.opcion.correcta {
background: #eaf3de;
border-color: #639922;
color: #3b6d11;
}
.opcion.incorrecta {
background: #fcebeb;
border-color: #e24b4a;
color: #a32d2d;
}
/* ── Feedback ── */
#feedback {
font-size: 0.8rem;
min-height: 1.2rem;
color: #555;
margin-bottom: 1.25rem;
}
/* ── Botones de acción ── */
.btn {
padding: 10px 20px;
font-size: 0.875rem;
font-weight: 500;
border-radius: 8px;
border: 0.5px solid #ccc;
background: #1a1a1a;
color: #fff;
cursor: pointer;
transition: opacity 0.15s;
}
.btn:hover { opacity: 0.85; }
.btn-secondary {
background: transparent;
color: #1a1a1a;
}
/* ── Pantalla de resultado ── */
#resultado {
text-align: center;
padding: 1rem 0;
}
.resultado-score {
font-size: 3rem;
font-weight: 500;
line-height: 1;
margin-bottom: 0.5rem;
}
.resultado-label {
font-size: 0.875rem;
color: #888;
margin-bottom: 0.5rem;
}
.resultado-msg {
font-size: 1rem;
font-weight: 500;
margin-bottom: 2rem;
}

View File

@@ -7,7 +7,36 @@
<link rel="stylesheet" href="estilo.css"> <link rel="stylesheet" href="estilo.css">
</head> </head>
<body> <body>
<h1>Ejercicio 9</h1>
<div class="card">
<div id="pantalla-quiz">
<div class="quiz-header">
<span class="quiz-title">Ejercicio 9 - Quiz de JavaScript</span>
<span class="quiz-progress" id="progreso">1 / 5</span>
</div>
<div class="progress-bar">
<div class="progress-fill" id="progress-fill" style="width: 0%"></div>
</div>
<p id="pregunta"></p>
<div id="opciones"></div>
<p id="feedback"></p>
<button class="btn" id="siguiente" style="display:none">Siguiente →</button>
</div>
<div id="resultado" style="display:none">
<p class="resultado-score" id="puntaje-num"></p>
<p class="resultado-label">respuestas correctas</p>
<p class="resultado-msg" id="resultado-msg"></p>
<button class="btn btn-secondary" id="reiniciar">Reiniciar quiz</button>
</div>
</div>
<script src="ejercicio9.js"></script> <script src="ejercicio9.js"></script>
</body> </body>