HTML5 中没有 <_template> 标签,它不是标准标签,浏览器将其视为未知自定义元素,不解析、无 content 属性;唯一合法原生模板标签是 <template>。

HTML5 中没有 <_template> 标签
直接说结论:<_template> 不是 HTML5 标准标签,浏览器会把它当作未知的自定义元素处理,不会触发任何模板解析逻辑。你看到的可能是拼写错误、框架私有语法(比如旧版 Angular 1.x 的 <template>),或者误把 <template> 写成了下划线前缀。
<template> 是唯一合法的原生模板标签
HTML5 规范中只定义了 <template>(无下划线),它的内容默认不渲染、不执行脚本、不加载资源,直到被 JavaScript 显式克隆并插入 DOM。
- 必须闭合:
<template>...</template>,不能自闭合 - 支持所有 HTML 内容,包括
<script>、<style>、<img>(但图片不会发起请求) - DOM 中可通过
document.querySelector('template')获取,用content.cloneNode(true)提取文档片段
<template id="card">
<div class="card">
<h3><slot name="title">Default</slot></h3>
<p><slot>Content here</slot></p>
</div>
</template>
<script>
const tmpl = document.getElementById('card');
const instance = tmpl.content.cloneNode(true);
document.body.appendChild(instance);
</script>
为什么有人写成 <_template>?常见混淆点
这不是浏览器行为,而是开发者手动约定或框架遗留导致的误解:
- 某些构建工具(如早期 Webpack + HTML loader)允许用
<_template>作为占位符,由插件替换——它本身不参与 HTML 解析 - AngularJS 1.x 曾用
<script type="text/ng-template">或<script type="text/template">存储模板,和<_template>无关 - 手误:把
<template>错打成<_template>,又没报错(因为浏览器忽略未知标签),导致误以为“能用” - Shadow DOM 或自定义元素中,有人用
<_template>当作语义化注释,但它对浏览器毫无意义
如何判断一个模板是否真正生效?
别依赖标签名是否存在,看三件事:
立即学习“前端免费学习笔记(深入)”;
-
是否在 DOM 中可见:打开 DevTools → Elements 面板,搜索
<template>,确认其content属性非空且已挂载到真实节点 -
脚本是否执行:在
<template>内放<script>console.log('run')</script>,刷新页面——没输出才对;如果输出了,说明它被当普通 HTML 解析了(比如被错误地放在<body>外或未闭合) -
资源是否加载:放
<img src="test.jpg">在<template>里,检查 Network 面板——不应出现test.jpg请求
只要这三点满足,才是真正的 HTML5 模板机制在工作。<_template> 连第一步都过不了——它只是个空壳标签,连 content 属性都没有。











