O HTML 5 introduziu o <template>
elemento que pode ser usado para essa finalidade (como agora descrito nas especificações do WhatWG e nos documentos MDN ).
Um <template>
elemento é usado para declarar fragmentos de HTML que podem ser utilizados em scripts. O elemento é representado no DOM como um HTMLTemplateElement
que possui uma .content
propriedade do DocumentFragment
tipo, para fornecer acesso ao conteúdo do modelo. Isso significa que você pode converter uma string HTML em elementos DOM, definindo o innerHTML
de um <template>
elemento e acessando a propriedade template
's .content
.
Exemplos:
/**
* @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>');
Observe que abordagens semelhantes que usam um elemento de contêiner diferente, como umdiv
, não funcionam bem. O HTML tem restrições sobre quais tipos de elementos podem existir dentro de quais outros tipos de elementos; por exemplo, você não pode colocar a td
como filho direto de a div
. Isso faz com que esses elementos desapareçam se você tentar definir o innerHTML
de a div
para contê-los. Como <template>
s não têm essas restrições em seu conteúdo, essa falha não se aplica ao usar um modelo.
No entanto, template
não é suportado em alguns navegadores antigos. Em janeiro de 2018, posso usar ... estima que 90% dos usuários globalmente estão usando um navegador que suporta template
s . Em particular, nenhuma versão do Internet Explorer os suporta; A Microsoft não implementou o template
suporte até o lançamento do Edge.
Se você tiver sorte o suficiente para escrever código direcionado apenas a usuários em navegadores modernos, vá em frente e use-o agora. Caso contrário, pode ser necessário esperar um pouco para que os usuários os atualizem.