Résumé
L'élément HTML <template>
est un mécanisme permettant une approche de mise en forme à l’aide de modèles, mais côté client. On déclare ainsi des fragments de HTML (DOM) qui ne seront pas mis en forme lors du chargement de la page, mais qui pourront être copiés, complétés… puis insérés dans le document via JavaScript. Cet élément peut-être comparé à un élément de stockage de contenu HTML pouvant être réutilisé.
Le contenu de l’élément <template> est toutefois parsé pendant le chargement de la page afin d’assurer sa validité.
- Catégories de contenu Contenu de méta-donnée
- Contenu autorisé Contenu de méta-donnée, contenu de flux, tout contenu HTML valide autorisé dans les éléments
<ol>
,<dl>
,<figure>
,<ruby>
,<object>
,<video>
,<audio>
,<table>
,<colgroup>
,<thead>
,<tbody>
,<tfoot>
,<tr>
,<fieldset>
,<select>
,<details>
et<menu>
dont l’attributtype
correspond à l’état popup. - Omission de balises Aucune, la balise d'ouverture et la balise de fermeture sont obligatoires.
- Éléments parents autorisés
<body>
,<frameset>
,<head>
et<colgroup>
sans attribut <>span>
. - Interface DOM
HTMLTemplateElement
.
Attributs
Cet élément inclut les attributs globaux.
Il contient également un attribut content
en lecture seule. Il met à disposition un accès au contenu du modèle. Cet attribut content
est souvent utilisé pour tester la prise en charge par le navigateur de l’élément <template>
.
Exemples
Tout d’abord nous commençons par la partie HTML de l’exemple avec un tableau et un modèle de ligne de tableau.
<table id="producttable"> <thead> <tr> <td>Code_UPC</td> <td>Nom_du_produit</td> <td>Quantité</td> <td>Allée</td> </tr> </thead> <tbody> <!-- des données existantes peuvent être inclues ici de manière facultative --> </tbody> </table> <template id="productrow"> <tr> <td class="record"></td> <td></td> <td></td> <td></td> </tr> </template>
Puis nous passons à la partie JavaScript de l’exemple, qui sera utilisée pour instancier le modèle HTML.
// Contrôle tout d’abord si le navigateur prend en charge l’élément HTML template, // en testant la présence d’un attribut nommé content. if ('content' in document.createElement('template')) { // Instancie le tableau avec le contenu HTML tbody existant ainsi que la ligne contenant le modèle var tbl = document.querySelector("#producttable tbody"), prd = document.getElementById("productrow"); // Création d’une nouvelle ligne var td = prd.content.querySelectorAll("td"); td[0].textContent = "0384928527"; td[1].textContent = "Acme Green Beans"; td[2].textContent = "42"; td[3].textContent = "11B"; // Clone la nouvelle ligne et l’insère dans le tableau tbl.appendChild(prd.content.cloneNode(true)); // Création d’une nouvelle ligne td[0].textContent = "0384928528"; td[1].textContent = "Acme Kidney Beans"; td[2].textContent = "31"; td[3].textContent = "11B"; // Clone la nouvelle ligne et l’insère dans le tableau tbl.appendChild(prd.content.cloneNode(true)); } else { // Trouver une autre solution pour ajouter la ligne dans la table car // l’élément HTML template n’est pas supporté. }
Le résultat est le tableau HTML original, mais avec deux nouvelles lignes ajoutées par le JavaScript.
Spécifications
Fait actuellement parti du brouillon de spécification, HTML Templates.
Compatibilité des navigateurs
Fonctionnalité | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|
Prise en charge basique | (Oui) | (Oui) | ? | (Oui) | ? |
Fonctionnalité | Android | Firefox Mobile (Gecko) | IE Phone | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|
Prise en charge basique | ? | ? | ? | ? | ? |
Voir également
- Composants web :
<content>
,<decorator>
,<element>
,<shadow>