HTML Tag Reference
template 要素
スクリプトが利用する HTML の断片
template 要素は、複製され、スクリプトによって文書に挿入することが可能な HTML の断片を定義します。
template 要素内のコンテンツは、ページの読み込み時にはパースされますが、レンダリングツリーには直接挿入されず、JavaScript を通じて明示的にインスタンス化されるまで表示されません。
template 要素によってUIコンポーネントを定義しておくことで、JavaScript からその内容をコピーしたり、動的にデータを挿入したりすることで、繰り返されるコンテンツなどの生成を容易に行えます。
また、shadowrootmode 属性によって、Shadow root(シャドウルート)として宣言することもでき、この場合は、CSS のスコープを Shadow root 内に限定するなど、UIコンポーネントの実装時に大きなメリットが享受できます。
template 要素に指定可能な属性は下記の通りです。
属性 | 概要 |
---|---|
shadowrootmode 属性 | 宣言型 Shadow root(シャドウルート)とします。 |
shadowrootdelegatesfocus 属性 | 宣言型シャドウルートの delegatesFocus プロパティ値を true に設定します。shadowrootdelegatesfocus 属性は論理属性です。 |
shadowrootclonable 属性 | 宣言型シャドウルートの clonable プロパティ値を true に設定し、クローン(複製)可能であることを表します。shadowrootclonable 属性は論理属性です。 |
shadowrootserializable 属性 | 宣言型シャドウルートの serializable プロパティ値を true に設定します。shadowrootserializable 属性は論理属性です。 |
template 要素の仕様
- コンテンツモデル
- この要素を使用できる文脈
- メタデータ・コンテンツが期待される場所
- フレージング・コンテンツが期待される場所
- スクリプト支援要素が期待される場所
- span 属性を持たない colgroup 要素の直下
template 要素のサンプルソース
<table> <thead> <tr> <th>名前</th> <th>出身地</th> <th>性別</th> <th>年齢</th> </tr> </thead> <tbody> <template id="row"> <tr> <td></td> <td></td> <td></td> <td></td> </tr> </template> </tbody> </table> <script> const template = document.querySelector('#row'); const data = [ { 名前: '日本太郎', 出身地: '東京都', 性別: '男性', 年齢: 30 }, { 名前: '日本次郎', 出身地: '長野県', 性別: '男性', 年齢: 28 }, { 名前: '日本三郎', 出身地: '大阪府', 性別: '男性', 年齢: 24 }, { 名前: '日本花子', 出身地: '鹿児島県', 性別: '女性', 年齢: 31 }, { 名前: '日本富子', 出身地: '北海道', 性別: '女性', 年齢: 21 } ]; for (const cat of data) { const clone = template.content.cloneNode(true); const cells = clone.querySelectorAll('td'); cells[0].textContent = cat.名前; cells[1].textContent = cat.出身地; cells[2].textContent = cat.性別; cells[3].textContent = cat.年齢; template.parentNode.appendChild(clone); } </script>
<template shadowrootmode="open"> <style>h2 { color: blue; }</style> <h2>shadow content</h2> </template>
主要ブラウザの対応
IE11 | ○ |
---|---|
Edge(EdgeHTML) | ○ |
Edge(Chromium) | ○ |
Chrome | ○ |
Firefox | ○ |
Safari | ○ |
iOS Safari | ○ |
Android Chrome | ○ |