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 HTMLTemplateElementque possui uma .contentpropriedade do DocumentFragmenttipo, para fornecer acesso ao conteúdo do modelo. Isso significa que você pode converter uma string HTML em elementos DOM, definindo o innerHTMLde 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 tdcomo filho direto de a div. Isso faz com que esses elementos desapareçam se você tentar definir o innerHTMLde a divpara 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, templatenã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 templates . Em particular, nenhuma versão do Internet Explorer os suporta; A Microsoft não implementou o templatesuporte 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.