CodeGym /Cours Java /Frontend SELF FR /Balises de template

Balises de template

Frontend SELF FR
Niveau 10 , Leçon 5
Disponible

5.1 Balise <template>

La balise <template> en HTML permet aux développeurs de définir des fragments de code HTML qui ne seront pas affichés lors du chargement de la page, mais qui peuvent être utilisés plus tard via JavaScript. C'est super utile pour créer et insérer dynamiquement du contenu, comme des éléments de liste, des fiches produit ou d'autres structures répétitives.

L'élément <template> est utilisé pour stocker du code HTML qui ne sera pas immédiatement visible sur la page. Le contenu à l'intérieur de <template> n'est pas rendu par le navigateur lors du chargement de la page, mais il est accessible via le DOM (Document Object Model) et peut être cloné et inséré dans le document grâce à JavaScript.

Syntaxe :

HTML
    
      <template>
        <!-- Contenu du template -->
      </template>
    
  

Principales caractéristiques de la balise <template>

  1. Masquage du contenu : le contenu de la balise <template> n'est pas affiché sur la page lors de son chargement.
  2. Utilisation avec JavaScript : le contenu de la balise <template> peut être cloné et inséré dans le DOM via JavaScript.
  3. Chargement différé : permet de charger et afficher le contenu uniquement lorsque c'est nécessaire, ce qui peut améliorer les performances de la page.

Exemple d'utilisation de la balise <template>

Dans cet exemple, en cliquant sur le bouton "Add Item", un nouvel élément de liste est créé et ajouté à la liste <ul>. Le template pour ce nouvel élément de liste est défini dans la balise <template>.

HTML
    
      <button id="addButton">Add Item</button>
      <ul id="itemList"></ul>
      <template id="itemTemplate">
        <li class="item">This is a new item</li>
      </template>
    
  
JavaScript
    
// On récupère des références aux éléments du DOM que nous allons utiliser
const addButton = document.getElementById('addButton'); // Le bouton "Ajouter"
const itemList = document.getElementById('itemList'); // La liste où ajouter les éléments
const itemTemplate = document.getElementById('itemTemplate'); // Le template de l'élément de liste

// Ajoutons un gestionnaire d'événement au bouton "Ajouter"
addButton.addEventListener('click', () => {
  // On clone le contenu du template d'un élément de liste
  const newItem = itemTemplate.content.cloneNode(true); // true signifie un clonage profond (inclut tous les éléments enfants)

  // On ajoute le nouvel élément à la liste
  itemList.appendChild(newItem); 
});
    
  

5.2 Exemple : génération de fiches produit

Avec <template> et JavaScript, on peut, par exemple, générer une liste d'éléments — des fiches produit.

Exemple d'utilisation de la balise <template> :

HTML
    
      <h1>Liste de produits</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
    
// On attend que le DOM soit complètement chargé avant d'exécuter le script
document.addEventListener('DOMContentLoaded', () => {
  // Tableau de données produit
  const products = [
    { title: 'Produit 1', description: 'Description du produit 1', price: '100 €' },
    { title: 'Produit 2', description: 'Description du produit 2', price: '200 €' },
    { title: 'Produit 3', description: 'Description du produit 3', price: '300 €' },
  ];

  // On récupère des références aux éléments du DOM
  const productList = document.getElementById('productList'); // Conteneur de la liste de produits
  const template = document.getElementById('productTemplate').content; // Template de l'élément produit

  // On parcourt le tableau des produits et on crée un élément pour chaque produit
  products.forEach(product => {
    // On clone le template du produit
    const clone = document.importNode(template, true); // true - clonage profond

    // On remplit les données dans le template cloné
    clone.querySelector('.title').textContent = product.title;
    clone.querySelector('.description').textContent = product.description;
    clone.querySelector('.price').textContent = product.price;

    // On ajoute le template rempli à la liste de produits
    productList.appendChild(clone);
  });
});
    
  

Explications

  • Balise <template> : contient du code HTML qui n'est pas affiché lors du chargement de la page.
  • Méthode document.importNode(template, true) : clone le contenu du template.
  • Méthodes querySelector et textContent : utilisées pour modifier le contenu du template cloné avant de l'insérer dans le document.

5.3 Avantages de la balise <template>

Amélioration des performances

Utiliser des templates permet de précharger du code HTML qui sera utilisé plus tard. Cela peut améliorer les performances de la page, car le contenu des templates n'est pas rendu et n'impacte pas le chargement initial de la page.

Simplification du contenu dynamique

Les templates simplifient la création de contenu dynamique. Plutôt que de générer du code HTML de manière programmée avec JavaScript, on peut simplement cloner et modifier des templates préalablement préparés.

Facilité et lisibilité

Les templates rendent le code plus lisible et structuré, puisque le code HTML pour les éléments répétitifs peut être stocké séparément, au lieu d'être inséré dans JavaScript.

Exemple avec affichage conditionnel de contenu :

HTML
    
      <h1>Résultats de l'opération</h1>
      <div id="messageContainer"></div>

      <template id="messageTemplate">
        <div class="message">
          <p class="content"></p>
        </div>
      </template>
    
  
JavaScript
    
document.addEventListener('DOMContentLoaded', () => {
  // On récupère des références aux éléments du DOM
  const messageContainer = document.getElementById('messageContainer'); // Conteneur pour les messages
  const template = document.getElementById('messageTemplate').content; // Template du message

  // Fonction pour afficher un message
  function showMessage(type, text) {
    // On clone le template du message
    const clone = document.importNode(template, true); // true - clonage profond

    // On récupère une référence à l'élément message dans le clone
    const messageDiv = clone.querySelector('.message');

    // On ajoute une classe correspondant au type de message (success ou error)
    messageDiv.classList.add(type);

    // On définit le texte du message
    messageDiv.querySelector('.content').textContent = text;

    // On ajoute le message au conteneur
    messageContainer.appendChild(clone);
  }

  // On appelle la fonction pour afficher des messages
  showMessage('success', 'Opération effectuée avec succès !');
  showMessage('error', 'Une erreur s\'est produite lors de l\'opération.');
});
    
  

Explications :

  • La fonction showMessage() : prend en paramètre le type de message (succès ou erreur) et le texte du message, clone le template, et l'ajoute au conteneur de messages.
  • Les classes .success et .error : sont appliquées au template cloné selon le type de message pour le styliser.
1
Опрос
Les balises sémantiques de HTML5,  10 уровень,  5 лекция
недоступен
Les balises sémantiques de HTML5
Les balises sémantiques de HTML5
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION