`
2008winstar
  • 浏览: 60889 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
  • chenke: 写的很好,也可以看看那这个文章,我感觉学的还可以。http:/ ...
    HTML

HTML template

 
阅读更多

<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

    HTMLTemplate是一种用于构建动态网页的模板技术,它允许开发者通过结合HTML、JavaScript和JSON数据来创建交互式的用户界面。在Web开发中,HTMLTemplate扮演着关键角色,它简化了前端数据绑定和页面更新的过程,提高...

    MartPlace - Multipurpose Online Marketplace HTML Template with Dashboard

    正版购买地址和预览地址https://themeforest.net/item/martplace-multipurpose-online-marketplace-html-template/21212869

    htmltemplate-react

    htmltemplate-react npm install htmltemplate-react 尝试提供由React组件提供动力的类似的标签系统的子集。 这是概念的证明。 您可能不想在新项目上使用。 例子 npm install cd example webpack open index.html

    vite-plugin-html-template:用于Vite的html模板,例如用于Webpack的HtmlWebpackPlugin

    用于ViteHTML模板,例如用于Webpack的HtmlWebpackPlugin ...import htmlTemplate from 'vite-plugin-html-template' // @see https://vitejs.dev/config/ export default defineConfig ( { plugins :

    template-native.js

    template-native.js

    html-template-es-modules:用于将HTML模板导入ES模块的简单概念验证

    &lt;/ h1&gt;&lt; p&gt; &lt; em&gt; Coming at you live, from an HTML Template imported as an ES Module! &lt;/ em&gt; &lt;/ p&gt; 您可以将其导入如下所示: import template from './hello-world.html' ;console . log ( template . ...

    java 中根据html模板生成新的html

    String template = "&lt;html&gt;&lt;body&gt;&lt;h1&gt;${title}&lt;/h1&gt;&lt;p&gt;${content}&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;"; String result = template.replace("${title}", "Java与HTML结合").replace("${content}", "这是一个示例"); ``` 2. **使用...

    HTMLTemplate-开源

    HTMLTemplate是Plone内容管理系统中的一个关键组成部分,它是一个开源软件项目,旨在提供更灵活的HTML文档创建方式。Plone是一个基于Zope的应用程序服务器构建的高性能内容管理框架,广泛用于企业级网站、内部网和...

    HTML Template C++-开源

    在这个“HTML Template C++-开源”项目中,我们看到一个C++实现的模板引擎,其设计灵感来源于Perl的HTML::Template库。这个库的目的是提供一种方便的方式来在C++程序中嵌入动态内容,同时保持HTML代码的清晰和可读性...

    前端示例大全系列17htmltemplate.7z

    前后端分离 js与css公用引入示例物超所值,本人将发布当前手头各种前端技术如bootstrap,jquery 不想用积分可以去github搜索vskeddemolist目录中vskeddemolist\vskeddemos\htmljavascriptcss

    C HTML Template Library-开源

    受Perl HTML :: Template启发的用C编写HTML模板库。 模板语言具有类似HTML的标签(tmpl_var,tmpl_if,tmpl_loop等)。使用库可构建变量列表并将其传递给模板。

    website template

    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...

    HTML template for PHP-开源

    文件`htmltemplate_oo`可能是这个模板引擎的源代码文件,名字中的"oo"可能暗示着该模板引擎采用了面向对象的编程方式。这通常意味着类和对象被用来封装模板相关的逻辑,提供更灵活的扩展和维护性。 总的来说,"HTML...

    gomodest-starter:使用Go,htmltemplate包和少量javascript的复杂SAAS入门套件

    GOMODEST是使用Go的html/template , SvelteJS和StimulusJS的多页应用程序(MPA)入门套件。 它受到列出的构建Web应用程序的适度方法的启发。 动机 我是一位devops工程师,他涉足UI用于辅助项目,内部工具等。 SPA /...

    html-template-element:从Polymer中提取并解耦HTMLTemplate元素的polyfill

    在HTML5中,`&lt;template&gt;`标签被引入,用于创建不可渲染的内容,这些内容在DOM加载时不被执行,直到被JavaScript或其他Web API激活。这个特性使得页面的结构和数据可以更灵活地分离,提高了代码的可维护性和性能。 ...

    Chunk, an HTML Template Engine for Java-开源

    强大的Java模板引擎,非常适合构建HTML或XML文档。 块也可以处理许多其他需求和情况。 标记内过滤器和默认值,每个文件多个摘要,分层主题,宏,条件包括,本地化等。

    Unify v3.2.2 - Responsive Website Template

    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标签 详细介绍+示例源代码.zip

    HTML5的`&lt;template&gt;`标签是一个非常重要的网页开发工具,它允许开发者在页面上定义模板内容,这些内容在页面加载时不会被解析或显示,只有当JavaScript或其他脚本需要使用时才会激活。这一特性使得`&lt;template&gt;`标签...

    html2wordtemplate.docx

    `html2wordtemplate.docx`这个文件标题表明,我们要讨论的是如何将HTML格式的文本转换为Microsoft Word文档,更具体地说,是利用Java的`poi-tl`库来完成这个过程。`poi-tl`是Apache POI项目的一个扩展,专门用于创建...

    extent_report_template.html

    在本场景中,我们关注的是一个名为"extent_report_template.html"的文件,这是一个定制化的Extent Reports模板,适用于HttpRunner生成的测试报告。 HttpRunner是一个基于Python的高性能接口测试框架,它支持HTTP...

Global site tag (gtag.js) - Google Analytics