Saltar al contenido principal
Codigo Heroe
Tarea anterior
JavaScript en el navegador9/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 createElement: crear un elemento

Empecemos a agregar la tarjeta de producto. Si lo hiciéramos directamente en el HTML, agregaríamos otro li con la clase product a la lista. Para hacer lo mismo con JavaScript necesitamos varios pasos. Vamos en orden.

Crear un elemento DOM

Primero crearemos un nuevo elemento de lista, li. Hay varias formas de crear elementos. Usaremos el método createElement() del objeto document. Recibe una cadena con el nombre de la etiqueta y devuelve el elemento DOM creado. Podemos guardarlo en una variable para trabajar con él después:

var card = document.createElement('li');

createElement es un método del objeto document. Crea un elemento para este documento, pero todavía no indica en qué parte del DOM se colocará.

Agregar una clase

Este paso ya lo conoces. Usamos classList del elemento creado:

var card = document.createElement('li');
card.classList.add('card');

Insertar el elemento en el árbol DOM

El elemento recién creado todavía no pertenece al árbol DOM y no aparece en la página. Lo tenemos guardado en una variable. Para mostrarlo, debemos insertarlo en el DOM. Buscaremos un elemento padre en el árbol y colocaremos nuestro elemento dentro de él.

Usaremos el método appendChild() del padre. Recibe un elemento y lo inserta al final del elemento padre. Si la lista ya tiene tres elementos, como en nuestro caso, el que agreguemos con appendChild será el cuarto.

var list = document.querySelector('.cards');
var card = document.createElement('li');
card.classList.add('card');

// Al llamar a este método, el nuevo elemento aparecerá en la página
list.appendChild(card);

Así queda la estructura del DOM después de llamar a appendChild:

<!-- Estado inicial del HTML -->
<ul class="cards">
  <li class="card">Elemento existente</li>
</ul>

<!-- Estado después de llamar a appendChild -->
<ul class="cards">
  <li class="card">Elemento existente</li>
  <li class="card">Elemento agregado</li>
</ul>

También podríamos cambiar el orden: crear el elemento con createElement, insertarlo de inmediato en el padre y después agregarle clases. Sin embargo, trabajar directamente sobre el DOM puede obligar al navegador a recalcular la apariencia de la página. Conviene preparar el elemento antes de insertarlo.

Creemos la tarjeta, agreguemos su clase e insertémosla al final de la lista de productos. Después volveremos a mostrar children en la consola para comprobar que nuestra tarjeta forma parte de la colección. Esta colección se actualiza automáticamente cuando cambia el DOM.

  • 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:empty { background-color: rgb(225, 225, 239); } .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 cardList = document.querySelector('.products'); console.log(cardList.children);

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. Crea un elemento de lista li con createElement y guárdalo en la variable listItem.
    2. Agrega la clase product al elemento de lista.
    3. Agrega listItem al final de la lista de productos con appendChild.
    4. Debajo, vuelve a mostrar en la consola la colección de elementos hijos de cardList.
    Codigo Heroe

    © 2023-2026, codigoheroe.com