标准答案

  1. template 元素用于保存可复用的 HTML 片段,页面加载时不会直接渲染出来。
  2. template 的内容在 content 这个 DocumentFragment 中,需要脚本 clone 后再插入页面。
  3. display: none 的元素已经是 DOM 的一部分,只是视觉上不显示;template 内容默认还没有进入可见页面结构。
  4. template 适合原生组件、列表项模板、Web Components 和少量声明式渲染场景。
  5. 如果项目已经使用 Vue、React 等框架,通常由框架模板或组件系统承担这类工作。

题目解析

区别重点在“是否已经成为实际页面节点”。隐藏 DOM 仍会占据 DOM 结构和可被选择,template 更像惰性的 HTML 蓝图。

template 里的脚本、图片等资源不会像普通 DOM 那样立即参与渲染和加载。

代码示例

先克隆 template.content,再把克隆结果插入页面。

HTML
<template id="user-card">
  <article class="card">
    <h2></h2>
  </article>
</template>

<script>
  const template = document.querySelector('#user-card')
  const node = template.content.cloneNode(true)
  node.querySelector('h2').textContent = 'Ada'
  document.body.append(node)
</script>

常见误区

  • 把 template 当成普通隐藏容器,期待它直接显示。
  • 直接修改 template 内部节点后,忘记 clone 和插入页面。
  • 在现代框架项目里重复造一套模板系统,增加维护成本。

作者信息