<template>标签元素
template元素用于声明HTML片段,该HTML片段可以通过脚本(script)被克隆以及插入到文档中。
而在浏览器的渲染过程中,template元素内的内容是不会被渲染的。
template.content:
返回template标签内的内容,该内容存储在与另外一个Document关联的文档片段中(Document Fragment),这样就避免了template的内容影响到主文档(Document)。(如,避免了表单控件被提交,脚本被执行,等等)
特性检测:
function supportsTemplate() { return 'content' in document.createElement('template'); }
<template> 会在标签中定义一个模板。它包含了“模板内容”,这些内容为可克隆的惰性DOM块。可以把模板看成在整个开发过程中可以使用(重用)的脚手架的组成部分。
创建一个模板内容:
<template id="mytemplate"> <img src="" alt="photo"/> <div class="comment"></div> </template>
包裹在<template>中的内容具有几个重要特性:
1、它的内容在被激活前一直处于惰性状态。这些标签是隐藏的DOM且不会被渲染。
2、模板中的内容不会带来副作用,脚本不会执行,图片不会加载,音频不会播放,...直到模板被使用。
3、模板内容被当做在文档之外的东西。在主页面中使用document.getElementById()或querySelector()不会返回模板的子节点;
4、模板可以放在<head>,<body>或<frameset>内的任何地方,而且上述标签中能够出现的任何内容都可以放在模板中。“任何地方”意味着<template>能够安全地出现在几乎所有HTML解析器不允许出现的位置除了内容模型的子节点。它也可以作为<table>或<select>元素的子节点。
<table> <tr> <template id="cells-to-repeat"> <td>some content</td> </template> </tr> </table>
要使用一个模板,首先得激活它,否则它的内容将永远无法渲染。激活模板最简单的方法就是使用document.importNode()对模板的.content进行深拷贝。.content是DocumentFragment的一个只读属性,它包含了模板的内容。
var t = document.querySelector('#mytemplate'); t.content.querySelector('img').src = 'logo.png'; var clone = document.importNode(t.content, true); document.body.appendChild(clone);
Demos:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Demos</title> </head> <body> <button onclick="useIt()">Use me</button> <div id="container"></div> <script> function useIt() { var content = document.querySelector('template').content; var span = content.querySelector('span'); span.textContent = parseInt(span.textContent) + 1; document.querySelector('#container').appendChild( document.importNode(content, true) ); } </script> <template> <div> Template used: <span>0</span> </div> <script> alert('Thanks!'); </script> </template> </body> </html>
只有【Use me】按钮被点击后,模板中的脚本才会被执行。而在此之前脚本是不会执行的。
虽然可以通过对.innerHTML赋值为一串标签来将Shadow DOM挂再到Shadow Host上,如:
<div id="host"></div> <script> var shadow = document.querySelector('#host').createShadowRoot(); shadow.innerHTML = '<span>Host node</span>'; </script>
但这种方法不利于扩展与维护,如果Shadow DOM结构越复杂,就需要越多的字符串拼接操作,而且容易导致XSS问题。
而使用<template>能合理地解决:将模板内容附加到Shadow root上,如:
<template> <style> :host { background: #f8f8f8; padding: 10px; transition: all 400ms ease-in-out; box-sizing: border-box; border-radius: 5px; width: 450px; max-width: 100%; } :host:hover { background: #ccc; } div { position: relative; } header { padding: 5px; border-bottom: 1px solid #aaa; } h3 { margin: 0 !important; } textarea { font-family: inherit; width: 100%; height: 100px; box-sizing: border-box; border: 1px solid #aaa; } footer { position: absolute; bottom: 10px; right: 5px; } </style> <div> <header> <h3>Add a Comment</h3> </header> <content select="p"></content> <textarea></textarea> <footer> <button>Post</button> </footer> </div> </template> <div id="host"> <p>Instructions go here</p> </div> <script> var shadow = document.querySelector('#host').createShadowRoot(); shadow.appendChild(document.querySelector('template').content); </script>
相关推荐
正版购买地址和预览地址https://themeforest.net/item/martplace-multipurpose-online-marketplace-html-template/21212869
HTMLTemplate ajax json模板
htmltemplate-react npm install htmltemplate-react 尝试提供由React组件提供动力的类似的标签系统的子集。 这是概念的证明。 您可能不想在新项目上使用。 例子 npm install cd example webpack open index.html
用于ViteHTML模板,例如用于Webpack的HtmlWebpackPlugin ...import htmlTemplate from 'vite-plugin-html-template' // @see https://vitejs.dev/config/ export default defineConfig ( { plugins :
前后端分离 js与css公用引入示例物超所值,本人将发布当前手头各种前端技术如bootstrap,jquery 不想用积分可以去github搜索vskeddemolist目录中vskeddemolist\vskeddemos\htmljavascriptcss
受Perl HTML :: Template启发的用C编写HTML模板库。 模板语言具有类似HTML的标签(tmpl_var,tmpl_if,tmpl_loop等)。使用库可构建变量列表并将其传递给模板。
Template Monster website templates, Flash templates and other web design products are famous for being top quality solution for a quick, easy and affordable website production. The best part about our...
GOMODEST是使用Go的html/template , SvelteJS和StimulusJS的多页应用程序(MPA)入门套件。 它受到列出的构建Web应用程序的适度方法的启发。 动机 我是一位devops工程师,他涉足UI用于辅助项目,内部工具等。 SPA /...
根据html模板生成新的html,很简单可以运行
强大的Java模板引擎,非常适合构建HTML或XML文档。 块也可以处理许多其他需求和情况。 标记内过滤器和默认值,每个文件多个摘要,分层主题,宏,条件包括,本地化等。
HTMLTemplate是Plone的产品。 有了HTMLTemplate,就可以使用其他动态可变组件来创建易于重用的标准HTML文档。
主要介绍了AngularJS延迟加载html template 的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
公司模板HTML
Unify – Multipurpose Responsive Template v3.2.2 ... Unify is a Static HTML Template. It should be compatible with any backend technology and frameworks. 不可多得的专业网站模板,使网站开发工作事半功倍!
java实现的根据html模版内容发送邮件,这是一个完整的eclipse项目,包含jar包,导入即可运行
也许有的中级前端知道type=text...HTML页面不认<script type="text/template">标签,怎么办? 比如 <script type="text/template"> ... 以上代码,HTML浏览器不能解析,报错. 怎么办? 我来教给你如何变相的让他认这个type.
JSHTML模板 这个gulp插件将带有模板的html文件转换为...var html2js = require ( 'gulp-html-js-template' ) ; gulp . task ( 'template' , function ( ) { return gulp . src ( 'my/template.html' ) . pipe ( html
go-template-lint是Go(和html / template)模板文件的模板。 支票 未使用的模板函数(例如,您的FuncMap定义了f但没有一个模板调用它) 用法 go get sourcegraph.com/sourcegraph/go-template-lint go-template-...
httprunner生成测试报告的美化模板,extent_report_template.html,欢迎大家下载。
cgi test:通过html template 生成 html 文件