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

Usar un objeto de datos

Por fin Cupcake envió un ejemplo de los datos de un producto. No es mucho, pero basta para mejorar createCard. Por ahora todos sus datos son fijos: por muchas veces que la llamemos, las tarjetas saldrán idénticas, como gemelas.

La información del producto llega en un objeto. Cada propiedad describe una característica. Empezaremos con estas:

  • imgUrl: la ruta de la imagen;
  • text: el nombre del producto;
  • price: el precio.

Para que la función produzca resultados distintos, debe recibir datos distintos. Agregaremos el parámetro product a createCard y, al llamarla, le pasaremos el objeto recibido. El objeto ya está en el código, aunque está comentado.

Después, dentro de la función, reemplazaremos los valores fijos por las propiedades del parámetro. Por ejemplo:

// Antes:
var title = makeElement('h2', 'product__title', 'Palo para selfies profesional');
picture.alt = 'Palo para selfies profesional';

// Después:
var title = makeElement('h2', 'product__title', product.text);
picture.alt = product.text;
  • 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"> </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 createCard = function () { var listItem = makeElement('li', 'product'); var title = makeElement('h2', 'product__title', 'Palo para selfies profesional'); listItem.appendChild(title); var picture = makeElement('img', 'product__image'); picture.src = 'device/item-4.jpg'; picture.alt = 'Palo para selfies profesional'; listItem.appendChild(picture); var price = makeElement('p', 'product__price', '1000'); listItem.appendChild(price); return listItem; }; var cardList = document.querySelector('.products'); /* var productInfo = { isAvailable: true, imgUrl: 'device/item-1.jpg', text: 'Palo para selfies para principiantes', price: 200, isSpecial: false, specialPrice: null }; */ var cardItem = createCard(); cardList.appendChild(cardItem);

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. Descomenta el objeto productInfo.
    2. Agrega el parámetro product a la declaración de createCard y el argumento productInfo a su llamada.
    3. Dentro de createCard, reemplaza la cadena 'Palo para selfies profesional' por la propiedad text del objeto product, tanto en el título como en el texto alternativo.
    4. Reemplaza la ruta de la imagen por la propiedad imgUrl de product.
    5. Reemplaza el precio por la propiedad price de product.
    Codigo Heroe

    © 2023-2026, codigoheroe.com