CodeGym /Curso de Java /Frontend SELF ES /Etiquetas de plantillas

Etiquetas de plantillas

Frontend SELF ES
Nivel 10 , Lección 5
Disponible

5.1 Etiqueta <template>

La etiqueta <template> en HTML permite a los desarrolladores definir fragmentos de código HTML que no se mostrarán al cargar la página, pero que pueden ser utilizados después a través de JavaScript. Esto es especialmente útil para la creación e inserción dinámica de contenido, como elementos de lista, tarjetas de producto y otras estructuras repetitivas.

El elemento <template> se usa para almacenar código HTML que no se mostrará en la página de inmediato. El contenido dentro de <template> no se renderiza por el navegador al cargar la página, pero está disponible a través del DOM (Document Object Model) y puede ser clonado e insertado en el documento con JavaScript.

Sintaxis:

HTML
    
      <template>
        <!-- Contenido de la plantilla -->
      </template>
    
  

Características principales de la etiqueta <template>

  1. Ocultación de contenido: el contenido de la etiqueta <template> no se muestra en la página al cargarla.
  2. Uso de JavaScript: el contenido de la etiqueta <template> puede ser clonado e insertado en el DOM mediante JavaScript.
  3. Carga diferida: permite cargar y mostrar el contenido solo cuando sea necesario, lo que puede mejorar el rendimiento de la página.

Ejemplo de uso de la etiqueta <template>

En este ejemplo, al hacer clic en el botón "Add Item" se crea un nuevo elemento de lista que se añade a la lista <ul>. La plantilla para el nuevo elemento de lista se define dentro de la etiqueta <template>.

HTML
    
      <button id="addButton">Add Item</button>
      <ul id="itemList"></ul>
      <template id="itemTemplate">
        <li class="item">Este es un nuevo elemento</li>
      </template>
    
  
JavaScript
    
// Obtenemos referencias a los elementos en el DOM que vamos a usar
const addButton = document.getElementById('addButton'); // Botón "Añadir"
const itemList = document.getElementById('itemList'); // Lista a la que añadiremos elementos
const itemTemplate = document.getElementById('itemTemplate'); // Plantilla de elemento de lista

// Añadimos manejador de eventos al botón "Añadir"
addButton.addEventListener('click', () => {
  // Clonamos el contenido de la plantilla del elemento de lista
  const newItem = itemTemplate.content.cloneNode(true); // true significa clonación profunda (incluyendo todos los elementos hijos)

  // Añadimos nuevo elemento a la lista
  itemList.appendChild(newItem); 
});
    
  

5.2 Ejemplo: generación de tarjetas de producto

Con <template> y JavaScript puedes, por ejemplo, generar una lista de elementos — tarjetas de producto.

Ejemplo de uso de la etiqueta <template>:

HTML
    
      <h1>Lista de productos</h1>
      <div id="productList"></div>
      <template id="productTemplate">
        <div class="item">
          <h2 class="title"></h2>
          <p class="description"></p>
          <span class="price"></span>
        </div>
      </template>
    
  
JavaScript
    
// Esperamos a que el DOM esté completamente cargado antes de ejecutar el script
document.addEventListener('DOMContentLoaded', () => {
  // Array de datos de productos
  const products = [
    { title: 'Producto 1', description: 'Descripción del producto 1', price: '100 USD' },
    { title: 'Producto 2', description: 'Descripción del producto 2', price: '200 USD' },
    { title: 'Producto 3', description: 'Descripción del producto 3', price: '300 USD' },
  ];

  // Obtenemos referencias a los elementos en el DOM
  const productList = document.getElementById('productList'); // Contenedor para la lista de productos
  const template = document.getElementById('productTemplate').content; // Plantilla del elemento de producto

  // Iteramos sobre el array de productos y para cada uno creamos un elemento en la lista
  products.forEach(product => {
    // Clonamos la plantilla del producto
    const clone = document.importNode(template, true); // true - clonación profunda

    // Rellenamos los datos en la plantilla clonada
    clone.querySelector('.title').textContent = product.title;
    clone.querySelector('.description').textContent = product.description;
    clone.querySelector('.price').textContent = product.price;

    // Añadimos la plantilla llena a la lista de productos
    productList.appendChild(clone);
  });
});
    
  

Explicación

  • Etiqueta <template>: contiene código HTML que no se muestra en la página al cargarla.
  • Método document.importNode(template, true): clona el contenido de la plantilla.
  • Métodos querySelector y textContent: se usan para cambiar el contenido de la plantilla clonada antes de insertarla en el documento.

5.3 Ventajas de la etiqueta <template>

Mejora del rendimiento

El uso de plantillas permite cargar con anticipación código HTML que será usado más tarde. Esto puede mejorar el rendimiento de la página, ya que el contenido de las plantillas no se renderiza y no afecta la carga inicial de la página.

Simplificación del contenido dinámico

Las plantillas simplifican la creación de contenido dinámico. En lugar de crear el código HTML de manera programática usando JavaScript, puedes simplemente clonar y modificar plantillas ya preparadas.

Comodidad y legibilidad

Las plantillas hacen que el código sea más legible y estructurado, ya que el código HTML para elementos repetitivos puede almacenarse por separado, en lugar de insertarlo en JavaScript.

Ejemplo con visualización condicional de contenido:

HTML
    
      <h1>Resultados de la operación</h1>
      <div id="messageContainer"></div>

      <template id="messageTemplate">
        <div class="message">
          <p class="content"></p>
        </div>
      </template>
    
  
JavaScript
    
document.addEventListener('DOMContentLoaded', () => {
  // Obtenemos referencias a los elementos en el DOM
  const messageContainer = document.getElementById('messageContainer'); // Contenedor de mensajes
  const template = document.getElementById('messageTemplate').content; // Plantilla de mensaje

  // Función para mostrar un mensaje
  function showMessage(type, text) {
    // Clonamos la plantilla de mensaje
    const clone = document.importNode(template, true); // true - clonación profunda

    // Obtenemos referencia al elemento de mensaje dentro del clon
    const messageDiv = clone.querySelector('.message');

    // Añadimos la clase correspondiente al tipo de mensaje (success o error)
    messageDiv.classList.add(type);

    // Establecemos el texto del mensaje
    messageDiv.querySelector('.content').textContent = text;

    // Añadimos el mensaje al contenedor
    messageContainer.appendChild(clone);
  }

  // Llamamos a la función para mostrar mensajes
  showMessage('success', '¡Operación completada con éxito!');
  showMessage('error', 'Hubo un error al realizar la operación.');
});
    
  

Explicación:

  • Función showMessage(): toma el tipo de mensaje (éxito o error) y el texto del mensaje, clona la plantilla y la añade al contenedor de mensajes.
  • Clases .success y .error: se aplican a la plantilla clonada dependiendo del tipo de mensaje para el estilo.
1
Опрос
Etiquetas semánticas HTML5,  10 уровень,  5 лекция
недоступен
Etiquetas semánticas HTML5
Etiquetas semánticas HTML5
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION