In HTML 5 wurde das <template>Element eingeführt , das für diesen Zweck verwendet werden kann (wie jetzt in der WhatWG-Spezifikation und in den MDN-Dokumenten beschrieben) ).
Ein <template>Element wird verwendet, um HTML-Fragmente zu deklarieren, die in Skripten verwendet werden können. Das Element wird im DOM als ein Element HTMLTemplateElementmit einer .contentEigenschaft vom DocumentFragmentTyp dargestellt, um den Zugriff auf den Inhalt der Vorlage zu ermöglichen. Dies bedeutet, dass Sie eine HTML-Zeichenfolge in DOM-Elemente konvertieren können, indem Sie das innerHTMLeines <template>Elements festlegen und dann in das template's greifen.content Eigenschaft von .
Beispiele:
/**
* @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>');
Beachten Sie, dass ähnliche Ansätze, die ein anderes Containerelement verwenden, z. B. adiv , nicht ganz funktionieren. In HTML gibt es Einschränkungen, welche Elementtypen in welchen anderen Elementtypen vorhanden sein dürfen. Zum Beispiel können Sie a nicht tdals direktes Kind von a setzen div. Dies führt dazu, dass diese Elemente verschwinden, wenn Sie versuchen, das innerHTMLvon a so einzustellen div, dass sie sie enthalten. Schon seit<template> s keine derartigen Einschränkungen für ihren Inhalt haben, gilt dieses Manko nicht, wenn eine Vorlage verwendet wird.
Wird templatejedoch in einigen alten Browsern nicht unterstützt. Ab Januar 2018 kann Can use ... Schätzungen zufolge verwenden 90% der Benutzer weltweit einen Browser, der templates unterstützt . Insbesondere unterstützt sie keine Version von Internet Explorer. Microsoft hat die templateUnterstützung erst mit der Veröffentlichung von Edge implementiert .
Wenn Sie das Glück haben, Code zu schreiben, der sich nur an Benutzer in modernen Browsern richtet, können Sie ihn jetzt verwenden. Andernfalls müssen Sie möglicherweise eine Weile warten, bis die Benutzer aufholen.