前端转载@JSWeb前端之路

HTML5 之 Template

2015-11-17  本文已影响363人  KeKeMars

兼容性检测

function supportsTemplate() {
  return 'content' in document.createElement('template');
}

if (supportsTemplate()) {
  // 检测通过!
} else {
  // 使用旧的模板技术或库。
}

HTML4 hidden DOM

DOM 并使用 hidden 特性或 display:none 来将其从视图中隐藏

HTML4 重载脚本

重载 <script> 并将它的内容作为字符串来操作。

<script id="mytemplate" type="text/x-handlebars-template">
  <img src="logo.png">
  <div class="comment"></div>
</script>

声明模板内容

<template id="mytemplate">
  <img src="" alt="great image">
  <div class="comment"></div>
</template>

激活模板

模板深拷贝: document.importNode(template.content, true)

var t = document.querySelector('#mytemplate');
// 在运行时填充 src。
t.content.querySelector('img').src = 'logo.png';

var clone = document.importNode(t.content, true);
document.body.appendChild(clone);

模板特性

模板应用

惰性脚本(Element绑定事件激活模板)

<button onclick="useIt()">Use me</button>
<div id="container"></div>
<script>
  function useIt() {
    var content = document.querySelector('template').content;
    // 更新 template DOM 中的内容。
    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>

从模板中生成 Shadow DOM

<template>
<style>
  ……
</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>

注意事项

参考

上一篇 下一篇

猜你喜欢

热点阅读