今天我们来聊一聊HTML中一个较少被提及的标签:<template>。虽然它在页面加载时不可见,但在现代Web框架中却扮演着重要的角色,比如Vue、Svelte和Solid等。

我们先介绍一下 <template> 标签的使用。

<template>:内容模板元素

内容模板(<template>)元素是一种用于保存客户端内容机制,该内容在加载页面时不会呈现,但随后可以在运行时使用 JavaScript 实例化。

将模板视为一个可存储在文档中以便后续使用的内容片段。虽然解析器在加载页面时确实会处理 <template> 元素的内容,但这样做只是为了确保这些内容有效;但元素内容不会被渲染。

关键点

  1. <template> 元素可以简单地理解为将多个元素组合在一起的一个组件。
  2. 它不会显示在页面上,只能通过JS去实例化。

属性

在深入了解 <template> 属性之前,我们先来了解一个重要的接口:DocumentFragment。

DocumentFragment

DocumentFragment,文档片段接口,表示一个没有父对象的最小文档对象。

它被作为一个轻量版的 Document 使用,就像标准的 document 一样,存储由节点(nodes)组成的文档结构。与 document 相比,最大的区别是它不是真实 DOM 树的一部分,它的变化不会触发 DOM 树的重新渲染,且不会对性能产生影响。

它的 API 和 document 是差不多类似的,包括 append、querySelector …

而我们会用到里面的 cloneNode 方法。用于返回节点的一个副本。

cloneNode 支持一个 deep 参数,用于是否采用深度克隆,如果为 true,则该节点的所有后代节点也都会被克隆,如果为 false,则只克隆该节点本身。