Saltar al contenido principal
Codigo Heroe
Tarea anterior
Manipulación del DOM15/21
A la lista de tareas
  1. 1. Buscar elementos para la lista de tareas
  2. 2. El evento change
  3. 3. Probar el evento change
  4. 4. Eliminar elementos con remove
  5. 5. Comprobar la longitud de una colección
  6. 6. Depurar el código
  7. 7. Colecciones estáticas y vivas
  8. 8. Mostrar un mensaje en la página
  9. 9. El evento submit
  10. 10. Cancelar el envío del formulario
  11. 11. Leer el texto de un campo con value
  12. 12. Plantillas y la etiqueta <template>
  13. 13. El contenido de <template> y DocumentFragment
  14. 14. Insertar y mover elementos con appendChild
  15. 15. Clonar elementos con cloneNode(false)
  16. 16. La clonación profunda con cloneNode(true)
  17. 17. Crear varias copias con un ciclo
  18. 18. Clonar la plantilla de una tarea
  19. 19. Completar e insertar una tarea nueva
  20. 20. Agregar un manejador a la tarea nueva
  21. 21. Ocultar el mensaje y vaciar el campo
Siguiente tarea
  • Matriz de skills
  • Cursos
  • Registro
  • Iniciar sesión

Loading…
En unos segundos, estará listo.

  • Teoría
  • Teoría

Clonar elementos con cloneNode(false)

Insertamos el elemento de la plantilla, después otro elemento y luego intentamos insertar el primero otra vez. El elemento de la plantilla aparece una sola vez y queda al final del bloque. ¿Por qué?

Porque sigue siendo el mismo elemento, aunque lo usemos como plantilla. No puede ocupar varios lugares de la página a la vez. Nosotros tampoco podemos estar en varios sitios al mismo tiempo, ¿verdad? Pues los elementos del DOM tampoco.

Para eso existe la clonación. Podemos clonar cualquier elemento, incluidos los que usamos como plantillas, e insertar sus copias tantas veces como queramos.

Para clonar usamos el método cloneNode, que devuelve una copia del nodo.

Este método recibe un argumento booleano. Si pasamos false, copia el propio elemento con sus clases y atributos, pero sin sus nodos hijos.

element.cloneNode(false); // Devuelve una copia sin nodos hijos

Probemos a clonar el elemento con false y a insertar esa copia en la página.

En el siguiente ejercicio veremos qué pasa con true y sin argumento. Spoiler: ¡las copias no siempre traen todo lo que esperas!

  • index.html
  • style.css
  • script.js
HTML
<!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8"> <title>Clonación de elementos</title> <link href="style.css" rel="stylesheet"> </head> <body> <div class="pool"> <div class="el"> <span>1</span> </div> <div class="el"> <span>2</span> </div> </div> <template id="element-template"> <div class="el"> <span><!--Número del elemento--></span> </div> </template> <script src="script.js"></script> </body> </html>
CSS
.pool { display: flex; flex-wrap: wrap; min-height: 330px; margin: 20px; padding: 10px; background-color: #e9e9f0; } .el { display: flex; justify-content: center; align-items: center; width: 150px; height: 150px; margin-right: 10px; margin-bottom: 10px; box-sizing: border-box; border: 20px solid #3366ff; background-color: #99b2ff; color: rgba(255, 255, 255, 0.9); font: bold 60px "Arial", sans-serif; text-align: center; } .el--green { background-color: #a3d095; border: 20px solid #518d3f; }
JavaScript
// Contenedor de las tarjetas var pool = document.querySelector('.pool'); // Obtenemos la plantilla de la tarjeta var template = document.querySelector('#element-template').content; var element = template.querySelector('div'); // Clonamos el elemento // var clonedElement = element.cloneNode(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. Descomenta la línea que clona el elemento.
    2. Muestra clonedElement en la consola.
    3. Inserta clonedElement al final de pool.
    Codigo Heroe

    © 2023-2026, codigoheroe.com