Xotic750 提供了一个可靠的 polyfill,它通过改变 HTML 元素来工作——但是如果以后将任何新模板添加到 DOM 中,它就会失败,并且越来越不鼓励改变(在可以避免的情况下)。
相反,我建议在您使用模板时引入“polyfill”行为。将此函数添加到您的 JS:
function templateContent(template) {
if("content" in document.createElement("template")) {
return document.importNode(template.content, true);
} else {
var fragment = document.createDocumentFragment();
var children = template.childNodes;
for (i = 0; i < children.length; i++) {
fragment.appendChild(children[i].cloneNode(true));
}
return fragment;
}
}
使用对模板元素的引用调用该函数。它将提取内容,并返回一个 documentFragment,然后您可以将其附加到另一个元素(或对模板内容执行任何其他操作)。像这样:
var template = document.querySelector("template#my-template");
var content = templateContent(template);
someElm.appendChild(content);
现在,另一个答案没有提到它,但你可能想要一些 CSS 来隐藏<template>
元素。
template { display: none; }
这是一个将所有内容组合在一起的CodePen。
现在,这将在原生支持该元素的浏览器和不支持该<template>
元素的浏览器中正常工作。与另一个答案类似,它不是一个完美的 polyfill,因为它不会使模板变得惰性(这将是复杂、缓慢且容易出错的)。但它足以让我在生产中使用。
如果您有任何疑问或问题,请发表评论,我会相应地进行修改。