W HTML 5 wprowadzono <template>
element, który można wykorzystać do tego celu (jak teraz opisano w specyfikacji WhatWG i dokumentach MDN ).
<template>
Element służy do deklarowania fragmenty HTML, który może być wykorzystywany w skryptów. Element jest reprezentowany w DOM jako element, HTMLTemplateElement
który ma .content
właściwość DocumentFragment
typu, aby zapewnić dostęp do zawartości szablonu. Oznacza to, że można przekonwertować ciąg HTML do elementów DOM ustawiając innerHTML
się z <template>
elementu, a następnie sięgając do template
„s .content
nieruchomości.
Przykłady:
/**
* @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>');
Zauważ, że podobne podejścia, które wykorzystują inny element kontenera, np.div
Nie całkiem działają. HTML ma ograniczenia co do tego, jakie typy elementów mogą istnieć, w których innych typach elementów; na przykład nie możesz umieścić td
jako bezpośredniego dziecka div
. Powoduje to zniknięcie tych elementów, jeśli spróbujesz ustawić innerHTML
a, div
aby je zawierał. Ponieważ <template>
nie mają takich ograniczeń dotyczących ich zawartości, to niedociągnięcie nie dotyczy korzystania z szablonu.
Jednak template
nie jest obsługiwany w niektórych starych przeglądarkach. Od stycznia 2018 r. Mogę używać ... szacuje, że 90% użytkowników na całym świecie korzysta z przeglądarki obsługującej template
s . W szczególności żadna wersja programu Internet Explorer nie obsługuje ich; Microsoft nie wdrożył template
wsparcia do czasu wydania Edge.
Jeśli masz szczęście pisać kod skierowany tylko do użytkowników w nowoczesnych przeglądarkach, skorzystaj z nich już teraz. W przeciwnym razie użytkownik może chwilę poczekać, aż nadrobią zaległości.