В HTML 5 появился <template>
элемент, который можно использовать для этой цели (как сейчас описано в спецификации WhatWG и документах MDN ).
<template>
Элемент используется для объявления фрагменты HTML , которые могут быть использованы в сценариях. Элемент представлен в DOM как объект HTMLTemplateElement
со .content
свойством DocumentFragment
типа, чтобы обеспечить доступ к содержимому шаблона. Это означает , что вы можете преобразовать строку HTML для элементов DOM, установив innerHTML
из <template>
элемента, затем достигая в template
«S .content
собственности.
Примеры:
/**
* @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>');
Обратите внимание, что похожие подходы, в которых используется другой элемент контейнера, напримерdiv
, не совсем работают. HTML имеет ограничения на то, какие типы элементов могут существовать внутри каких других типов элементов; Например, вы не можете поставить td
в качестве прямого потомка div
. Это приводит к тому, что эти элементы исчезают, если вы пытаетесь установить innerHTML
a div
для их содержания. Поскольку у <template>
s нет таких ограничений на их содержимое, этот недостаток не применяется при использовании шаблона.
Тем template
не менее, не поддерживается в некоторых старых браузерах. По состоянию на январь 2018 г. Можно ли использовать ... по оценкам, 90% пользователей во всем мире используют браузер, который поддерживает template
s . В частности, ни одна версия Internet Explorer не поддерживает их; Microsoft не реализовала template
поддержку до выхода Edge.
Если вам повезло, что вы пишете код, предназначенный только для пользователей в современных браузерах, используйте его прямо сейчас. В противном случае вам, возможно, придется подождать некоторое время, чтобы пользователи наверстали упущенное.