Saltar al contenido principal
Codigo Heroe
Tarea anterior
JavaScript en el navegador4/19
A la lista de tareas
  1. 1. Conectar un script a la página
  2. 2. El método querySelector: buscar un elemento
  3. 3. El método classList.add: agregar una clase
  4. 4. El método querySelectorAll: buscar varios elementos
  5. 5. Recorrer una colección de elementos
  6. 6. Comprobar la propiedad isAvailable
  7. 7. Comprobar la propiedad isSpecial
  8. 8. La propiedad children: elementos hijos
  9. 9. El método createElement: crear un elemento
  10. 10. La propiedad textContent: contenido de texto
  11. 11. Una función para crear elementos
  12. 12. Simplificar el código con makeElement
  13. 13. La propiedad src: la ruta de la imagen
  14. 14. Una función para crear una tarjeta de producto
  15. 15. Probar la función que crea tarjetas
  16. 16. Usar un objeto de datos
  17. 17. Comprobar la disponibilidad del producto
  18. 18. Mostrar una oferta especial
  19. 19. Usar un arreglo de objetos
Siguiente tarea
  • Matriz de skills
  • Cursos
  • Registro
  • Iniciar sesión

Loading…
En unos segundos, estará listo.

  • Teoría
  • Teoría

El método querySelectorAll: buscar varios elementos

¡Acertamos con las clases! Pero Cupcake siempre quiere más. Ahora tiene una exportación de productos de 1-Cupcake y nos pide actualizar todos los productos de la página. Necesitaremos un programa más completo:

¡Miau! Tenemos una tienda en línea con el HTML y el CSS listos. Hay que mostrar información actualizada sobre los productos en la interfaz: las ofertas especiales y la disponibilidad.

Los datos llegan en un arreglo de objetos llamado catalogData. Cada objeto corresponde a un producto y contiene las propiedades isAvailable (si el producto está disponible) e isSpecial (si tiene una oferta especial).

Cada estado del producto tiene su clase:

  • product--available para un producto disponible;
  • product--unavailable para un producto agotado;
  • product--special para una oferta especial.

¡Espero los resultados! No te demores, ¡el reloj sigue corriendo!

Cada elemento del arreglo de datos corresponde a un producto de la página. Ya sabemos buscar elementos DOM y podríamos encontrarlos uno por uno con querySelector. Por ejemplo, con un ciclo:

for (…) {
  var product = document.querySelector('.product:nth-child(' + i + ')');
}

querySelector siempre devuelve solo el primer elemento que encuentra. En cada iteración tendríamos que volver a buscar el siguiente elemento en el árbol DOM. Repetir esa búsqueda tiene un costo.

Es más eficiente obtener todos los elementos antes del ciclo y recorrer la lista dentro del ciclo. Para eso usaremos querySelectorAll: devuelve una lista o colección con todos los elementos que coinciden con el selector.

Crearemos la función updateCards y trabajaremos dentro de ella. Buscaremos todos los productos de la página y comprobaremos que la búsqueda funciona.

  • index.html
  • style.css
  • script.js
HTML
<!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8"> <title>Catálogo | Technomart</title> <link rel="stylesheet" href="technomart/setting.css"> <link rel="stylesheet" href="style.css"> </head> <body> <ul class="products"> <li class="product"> <h2 class="product__title">Alicates universales «Superagarre»</h2> <img class="product__image" src="technomart/good-1.jpg" width="200" height="150" alt="Alicates universales «Superagarre»"> <p class="product__price">800 ₽</p> </li> <li class="product"> <h2 class="product__title">Destornillador «Barrenita»</h2> <img class="product__image" src="technomart/good-2.jpg" width="200" height="150" alt="Destornillador «Barrenita»"> <p class="product__price">550 ₽</p> </li> <li class="product"> <h2 class="product__title">Pinzas «Copérnico»</h2> <img class="product__image" src="technomart/good-3.jpg" width="200" height="150" alt="Pinzas «Copérnico»"> <p class="product__price">1,350 ₽</p> </li> <li class="product"> <h2 class="product__title">Rotomartillo «¡Hola, vecino!»</h2> <img class="product__image" src="technomart/good-4.jpg" width="200" height="150" alt="Rotomartillo «¡Hola, vecino!»"> <p class="product__price">7,500 ₽</p> </li> <li class="product"> <h2 class="product__title">Martillo «Mjölnir»</h2> <img class="product__image" src="technomart/good-5.jpg" width="200" height="150" alt="Martillo «Mjölnir»"> <p class="product__price">2,000 ₽</p> </li> </ul> <script src="script.js"></script> </body> </html>
CSS
.product { position: relative; display: flex; flex-direction: column; align-items: center; width: 220px; margin-bottom: 20px; text-align: center; border: 1px solid #cccccc; } .product--available::before { content: ""; position: absolute; top: 5px; left: 5px; width: 15px; height: 15px; padding: 5px; background-image: url("technomart/check.svg"); background-repeat: no-repeat; background-position: center; background-size: 18px; border: 1px solid #4eb543; border-radius: 50%; } .product--unavailable { filter: grayscale(1) opacity(0.7); } .product--unavailable::before { content: "Agotado"; position: absolute; top: 0; left: 0; padding: 5px; font-size: 14px; } .product--special { flex-basis: 100%; order: -1; border-color: #ee3643; } .product--special::after { content: "Producto del día"; position: absolute; top: 0; right: 0; height: 30px; padding-right: 10px; padding-left: 10px; line-height: 30px; color: #ffffff; background-color: #ee3643; }
JavaScript
var catalogData = [ { isAvailable: true, isSpecial: false }, { isAvailable: false, isSpecial: false }, { isAvailable: true, isSpecial: true }, { isAvailable: true, isSpecial: false }, { isAvailable: false, isSpecial: false } ];

El código ha cambiado, haz clic en "Actualizar" o activa la ejecución automática.

Ha ido a otra página

Haga clic dentro del mininavegador para poner el foco en esta ventana.

100%
Consola
ObjetivosRealizado
0
    1. Después del arreglo catalogData, declara la función updateCards con el parámetro products.
    2. Debajo, llama a updateCards con el argumento catalogData.
    3. Dentro de la función, crea la variable elements y guarda en ella la colección de elementos DOM que devuelve querySelectorAll para el selector .product.
    4. Muestra elements en la consola.
    Codigo Heroe

    © 2023-2026, codigoheroe.com