<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>
相关推荐
HTMLTemplate是一种用于构建动态网页的模板技术,它允许开发者通过结合HTML、JavaScript和JSON数据来创建交互式的用户界面。在Web开发中,HTMLTemplate扮演着关键角色,它简化了前端数据绑定和页面更新的过程,提高...
正版购买地址和预览地址https://themeforest.net/item/martplace-multipurpose-online-marketplace-html-template/21212869
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 :
template-native.js
</ h1>< p> < em> Coming at you live, from an HTML Template imported as an ES Module! </ em> </ p> 您可以将其导入如下所示: import template from './hello-world.html' ;console . log ( template . ...
String template = "<html><body><h1>${title}</h1><p>${content}</p></body></html>"; String result = template.replace("${title}", "Java与HTML结合").replace("${content}", "这是一个示例"); ``` 2. **使用...
HTMLTemplate是Plone内容管理系统中的一个关键组成部分,它是一个开源软件项目,旨在提供更灵活的HTML文档创建方式。Plone是一个基于Zope的应用程序服务器构建的高性能内容管理框架,广泛用于企业级网站、内部网和...
在这个“HTML Template C++-开源”项目中,我们看到一个C++实现的模板引擎,其设计灵感来源于Perl的HTML::Template库。这个库的目的是提供一种方便的方式来在C++程序中嵌入动态内容,同时保持HTML代码的清晰和可读性...
前后端分离 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...
文件`htmltemplate_oo`可能是这个模板引擎的源代码文件,名字中的"oo"可能暗示着该模板引擎采用了面向对象的编程方式。这通常意味着类和对象被用来封装模板相关的逻辑,提供更灵活的扩展和维护性。 总的来说,"HTML...
GOMODEST是使用Go的html/template , SvelteJS和StimulusJS的多页应用程序(MPA)入门套件。 它受到列出的构建Web应用程序的适度方法的启发。 动机 我是一位devops工程师,他涉足UI用于辅助项目,内部工具等。 SPA /...
在HTML5中,`<template>`标签被引入,用于创建不可渲染的内容,这些内容在DOM加载时不被执行,直到被JavaScript或其他Web API激活。这个特性使得页面的结构和数据可以更灵活地分离,提高了代码的可维护性和性能。 ...
强大的Java模板引擎,非常适合构建HTML或XML文档。 块也可以处理许多其他需求和情况。 标记内过滤器和默认值,每个文件多个摘要,分层主题,宏,条件包括,本地化等。
Unify – Multipurpose Responsive Template v3.2.2 ... Unify is a Static HTML Template. It should be compatible with any backend technology and frameworks. 不可多得的专业网站模板,使网站开发工作事半功倍!
HTML5的`<template>`标签是一个非常重要的网页开发工具,它允许开发者在页面上定义模板内容,这些内容在页面加载时不会被解析或显示,只有当JavaScript或其他脚本需要使用时才会激活。这一特性使得`<template>`标签...
`html2wordtemplate.docx`这个文件标题表明,我们要讨论的是如何将HTML格式的文本转换为Microsoft Word文档,更具体地说,是利用Java的`poi-tl`库来完成这个过程。`poi-tl`是Apache POI项目的一个扩展,专门用于创建...
在本场景中,我们关注的是一个名为"extent_report_template.html"的文件,这是一个定制化的Extent Reports模板,适用于HttpRunner生成的测试报告。 HttpRunner是一个基于Python的高性能接口测试框架,它支持HTTP...