HTML 5 introdujo el <template>
elemento que puede usarse para este propósito (como se describe ahora en la especificación WhatWG y los documentos MDN ).
Un <template>
elemento se utiliza para declarar fragmentos de HTML que se pueden utilizar en scripts. El elemento se representa en el DOM como un HTMLTemplateElement
que tiene una .content
propiedad de DocumentFragment
tipo, para proporcionar acceso a los contenidos de la plantilla. Esto significa que puede convertir una cadena HTML en elementos DOM configurando innerHTML
un <template>
elemento y luego buscando en la propiedad template
's .content
.
Ejemplos:
/**
* @param {String} HTML representing a single element
* @return {Element}
*/
function htmlToElement(html) {
var template = document.createElement('template');
html = html.trim(); // Never return a text node of whitespace as the result
template.innerHTML = html;
return template.content.firstChild;
}
var td = htmlToElement('<td>foo</td>'),
div = htmlToElement('<div><span>nested</span> <span>stuff</span></div>');
/**
* @param {String} HTML representing any number of sibling elements
* @return {NodeList}
*/
function htmlToElements(html) {
var template = document.createElement('template');
template.innerHTML = html;
return template.content.childNodes;
}
var rows = htmlToElements('<tr><td>foo</td></tr><tr><td>bar</td></tr>');
Tenga en cuenta que los enfoques similares que utilizan un elemento contenedor diferente, como undiv
no funcionan del todo. HTML tiene restricciones sobre qué tipos de elementos pueden existir dentro de qué otros tipos de elementos; por ejemplo, no puedes poner a td
como hijo directo de a div
. Esto hace que estos elementos se desvanezcan si intenta establecer el valor innerHTML
de a div
para contenerlos. Ya que<template>
s no tienen tales restricciones en su contenido, esta deficiencia no se aplica cuando se usa una plantilla.
Sin embargo, template
no es compatible con algunos navegadores antiguos. A partir de enero de 2018, ¿puedo usar ... estima que el 90% de los usuarios de todo el mundo están usando un navegador que admite template
s . En particular, ninguna versión de Internet Explorer los admite; Microsoft no implementó el template
soporte hasta el lanzamiento de Edge.
Si tiene la suerte de escribir código que solo está dirigido a usuarios en navegadores modernos, continúe y utilícelos ahora mismo. De lo contrario, es posible que tenga que esperar un tiempo para que los usuarios se pongan al día.