Template 是一个惰性内容仓库,即未激活的 HTML 片段,其内容被解析为脱离主 DOM 的 DocumentFragment,不渲染、不执行脚本、不加载资源,仅在调用 cloneNode(true) 时克隆插入。
Template 元素本身不参与渲染,它只是个“模板容器”,浏览器会解析其内容但不会将其加入 DOM 树,也不会执行其中的脚本或加载资源。正因如此,它能避免重复创建、挂载、卸载节点带来的开销,让动态渲染更轻量、更可控。
标签定义一段**未激活的 HTML 片段**。它的内容在页面加载时被解析为 DOM 节点,但这些节点被存放在一个“文档片段(DocumentFragment)”中,完全脱离主 DOM —— 不渲染、不布局、不触发样式计算、不执行 script、不加载 img/video 等资源。
你可以把它理解成一个“待命的零件箱”,只在你明确调用 content.cloneN 时才真正复制出可用的节点。
ode(true)
基本用法非常直接:
document.getElementById('item-tpl').content 获取只读的 DocumentFragmentfragment.cloneNode(true) 得到一份全新、可操作的节点副本,再用 append() 或 appendChild() 插入目标容器例如渲染列表项时,每次新增都从 template 克隆,而不是拼接字符串或反复调用 createElement + setAttribute + appendChild,既安全又高效。
对比常见方式:
尤其在频繁增删、滚动加载、动画列表等场景下,template + cloneNode 的组合显著减少强制同步布局(forced reflow)次数。
Template 不是孤立使用的:
DocumentFragment 天然契合:template.content 就是 Fragment,可批量 append 后一次性插入,减少回流
和 Shadow DOM:适合封装可复用的 Web Component 模板注意:template 内部的 script 不会自动执行,如需动态行为,克隆后手动调用 eval(不推荐)或绑定事件、初始化逻辑更安全。