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 HTMLTemplateElement
mit einer .content
Eigenschaft vom DocumentFragment
Typ 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 innerHTML
eines <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 td
als direktes Kind von a setzen div
. Dies führt dazu, dass diese Elemente verschwinden, wenn Sie versuchen, das innerHTML
von 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 template
jedoch in einigen alten Browsern nicht unterstützt. Ab Januar 2018 kann Can use ... Schätzungen zufolge verwenden 90% der Benutzer weltweit einen Browser, der template
s unterstützt . Insbesondere unterstützt sie keine Version von Internet Explorer. Microsoft hat die template
Unterstü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.