Saltar al contenido principal
Codigo Heroe
Tarea anterior
JavaScript en el navegador12/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

Simplificar el código con makeElement

Ahora que tenemos una función para crear elementos, podemos reemplazar las líneas que crean el elemento y agregan su clase y su texto por una sola llamada a makeElement. El código será más fácil de leer y de usar.

Al crear la tarjeta con makeElement, solo pasamos la etiqueta li y la clase product. No le asignamos texto directamente a la tarjeta: el nombre y el precio van en sus elementos hijos. ¡Para eso escribimos la comprobación dentro de la función!

  • index.html
  • style.css
  • script.js
HTML
<!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8"> <title>Catálogo | Device</title> <link rel="stylesheet" href="device/setting.css"> <link rel="stylesheet" href="style.css"> </head> <body> <ul class="products"> <li class="product product--available"> <h2 class="product__title">Palo para selfies para principiantes</h2> <img class="product__image" src="device/item-1.jpg" alt="Palo para selfies para principiantes"> <p class="product__price">200</p> </li> <li class="product product--unavailable"> <h2 class="product__title">Palo para selfies profesional</h2> <img class="product__image" src="device/item-2.jpg" alt="Palo para selfies profesional"> <p class="product__price">1500</p> </li> <li class="product product--available"> <h2 class="product__title">Palo para selfies insumergible</h2> <img class="product__image" src="device/item-3.jpg" alt="Palo para selfies insumergible"> <p class="product__price">2500</p> </li> </ul> <script src="script.js"></script> </body> </html>
CSS
.products { display: flex; flex-wrap: wrap; justify-content: space-between; width: 570px; margin: 20px auto; padding: 0; list-style: none; } .product { position: relative; display: flex; flex-wrap: wrap; justify-content: space-between; width: 270px; margin-bottom: 30px; } .product__image { order: -1; width: 270px; height: 380px; margin-bottom: 15px; } .product__title { max-width: 180px; margin: 0; font-weight: 700; font-size: 18px; line-height: 24px; } .product__price { max-width: 80px; margin: 0; text-align: right; font-weight: 300; font-size: 16px; font-variant-numeric: lining-nums; line-height: 27px; } .product--special { order: -1; width: 100%; height: 380px; flex-direction: column; justify-content: flex-start; align-content: space-between; } .product--special .product__title { width: 270px; max-width: 100%; margin-bottom: 10px; font-size: 28px; line-height: 36px; } .product--special .product__price { width: 270px; max-width: 100%; text-align: left; text-decoration: line-through; color: #cccccc; } .product--special .product__special-price { margin: 0; } .product--special .product__image { outline: 3px solid #ffc600; } .product--special::before { content: "Producto del día"; position: absolute; top: 0; left: 0; display: flex; justify-content: center; align-items: center; padding: 5px 10px; font-weight: 500; color: #111111; text-transform: uppercase; background-color: #ffc600; } .product--available::after, .product--unavailable::after { position: absolute; top: 343px; left: 50%; padding: 10px 5px 2px 5px; border-bottom: 1px solid #57c74b; transform: translateX(-50%); } .product--available::after { content: "Disponible"; } .product--unavailable { filter: grayscale(1) opacity(0.7); } .product--unavailable::after { content: "Agotado"; } .product--special.product--available::after, .product--special.product--unavailable::after { left: 135px; }
JavaScript
var makeElement = function (tagName, className, text) { var element = document.createElement(tagName); element.classList.add(className); if (text) { element.textContent = text; } return element; }; var cardList = document.querySelector('.products'); console.log(cardList.children); var listItem = document.createElement('li'); listItem.classList.add('product'); cardList.appendChild(listItem); console.log(cardList.children); var title = document.createElement('h2'); title.classList.add('product__title'); title.textContent = 'Palo para selfies profesional'; listItem.appendChild(title); var price = document.createElement('p'); price.classList.add('product__price'); price.textContent = '1000'; listItem.appendChild(price);

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. Reemplaza el valor de listItem por makeElement('li', 'product') y elimina la línea que agrega la clase a ese elemento.
    2. De la misma forma, asigna a title el resultado de llamar a makeElement con los argumentos 'h2', 'product__title' y 'Palo para selfies profesional'. Elimina las líneas que agregan la clase y el texto al título.
    3. Haz lo mismo con price: reemplaza su valor por una llamada a makeElement y elimina las líneas que agregan su clase y su texto.
    Codigo Heroe

    © 2023-2026, codigoheroe.com