[46] template要素でテンプレートを作ろう
最終更新日:2017年12月26日 (初回投稿日:2013年02月22日)
<template>要素 も、メタデータ・コンテンツの1つです。そして、スクリプトサポート要素(Script-supporting element)と呼ばれるものの1つでもあります。
(スクリプトサポート要素は <template>要素と <script>要素です)
<template>要素 は、文字通り「テンプレート」を作ります。
テンプレート部分を作っておいて、あとでその中に JavaScriptでコンテンツを生成して表示することができるんです。
使用する要素 | <template> 〜 </template> |
---|
<template>の属性 | グローバル属性のみ |
---|
参考:
The template element - HTML 5.1 2nd Edition | W3C Recommendation
The template element - HTML Living Standard | WHATWG
template 要素 - HTML | MDN
●
2017年12月:この記事は「フォーム全般」についての記事でしたが、メタデータ・コンテンツの <template>要素が抜けていたので 差し替えました。記事番号の都合でやむを得ず。
「フォーム全般」についての要点は、[47] form要素で「送信先」と「送信方法」を指定しよう 内に入れました。
<template>要素の内容を JavaScriptで書く
ブラウザが JavaScriptを読み込んでいる間は、<template>要素の内容はレンダリングされず、JavaScriptが有効なら、 JavaScriptで生成されたコンテンツが表示されます。
下のコードは、W3C の仕様書のサンプルを日本語にアレンジしたものです。
(保護ネコのリストです)
<template>要素の中身になるデータ(3〜7行)は HTML内に決め打ち(ハードコード)で書いていますが、データベースを使った動的な内容でもOK。
<script>
// Data is hard-coded here, but could come from the server
var data = [
{ color: 'さばトラ', sex: 'オス', age: '子猫(6ヶ月)', ope: '済' },
{ color: '三毛', sex: 'メス', age: '成猫(2歳位)', ope: '済' },
{ color: '白地黒ブチ', sex: 'メス', age: '成猫(6歳)', ope: '済' },
];
</script>
<table class="column-cream">
<thead>
<tr>
<th>種類 <th>性別 <th>年齢 <th>避妊手術 <!--終了タグを省略してます-->
<tbody>
<template id="row">
<tr>
<td><td><td><td>
</template>
</table>
<script>
var template = document.querySelector('#row'); //template要素をIDで取得
for (var i = 0; i < data.length; i += 1) {
var cat = data[i];
var clone = template.content.cloneNode(true); //複製する
var cells = clone.querySelectorAll('td');
cells[0].textContent = cat.color;
cells[1].textContent = cat.sex;
cells[2].textContent = cat.age;
cells[3].textContent = cat.ope;
template.parentNode.appendChild(clone); //親ノードに追加
}
</script>
サンプルコードでは <thead>、<tr>、<th>、<tbody>、<td> の終了タグを省略して書いています。(詳細→(ちょっとメモ)HTML5 での 省略可能なタグについて)
<tbody>要素内に <template>要素を置き(14行目)、その中身(4つの <td>のセット)の内容が データを元に生成されるようにしています。
プレビューはこちら。(IE は実装していません。Edge はOK)
種類 | 性別 | 年齢 | 避妊手術 |
---|---|---|---|
JavaScript の指定が無ければ、このように <template>要素の中身は表示されません。
種類 | 性別 | 年齢 | 避妊手術 |
---|---|---|---|
<template>要素のコンテンツ・モデル
コンテンツ・モデルとは「中において良い要素」です。
(詳細→ [38-1] 「コンテンツ・モデル」で要素のルールを見てみよう)
<template>要素のコンテンツ・モデルは、このようになっています。
- メタデータ・コンテント
- フロー・コンテント
- <ol>と <ul>要素のコンテンツ・モデル
- <dl>要素のコンテンツ・モデル
- <figure>要素のコンテンツ・モデル
- <ruby>要素のコンテンツ・モデル
- <object>要素のコンテンツ・モデル
- <video> と <audio>要素のコンテンツ・モデル
- <table>要素のコンテンツ・モデル
- <colgroup>要素のコンテンツ・モデル
- <thead>, <tbody>, <tfoot>要素のコンテンツ・モデル
- <tr>要素のコンテンツ・モデル
- <fieldset>要素のコンテンツ・モデル
- <select>要素のコンテンツ・モデル
「ある要素のコンテンツ・モデル」がコンテンツ・モデルというのは、<template>要素をその要素の直下の子要素にできるということ。
例えば、<ol> と <ul>要素のコンテンツ・モデルは <li>なので、下の書き方ができます。
<ol>
<template>
<li></li>
</template>
</ol>
リストにあるの要素のコンテンツ・モデルは [38-2] 「コンテンツ・モデル」一覧 でご確認ください。
次回予告
<template>要素は、JavaScriptが必須。プログラマーの人なら面白いコトがいろいろできるんでしょうね。
次回から、フォームに関する要素を使ってみましょう。
フォームは、サイト上でビジターから情報を得られる重要な要素群です。
まずは フォームの部品をまとめる <form>要素を見てみましょう。
- 関連記事
-
- [49-5] input要素で「数」を入力してもらおう (number)
- [49-4] input要素で時間を入力してもらおう (datetime-local, date, month, week, time)
- [49-3] input要素で ラジオボタン や チェックボックスを作ろう (radio, checkbox)
- [49-2] input要素でテキストを入力してもらおう ( text, search, tel, url, email, password )
- [49-1] input要素の属性一覧・ type属性の値一覧
- [48] フォーム部品のグループ化のための fieldset要素と legend要素
- [47] form要素で「送信先」と「送信方法」を指定しよう
- [46] template要素でテンプレートを作ろう
- [45-5] meta要素で OGPを設定しよう
- [45-4] meta要素の http-equiv属性で動作を指示しよう
- [45-3] meta要素の name属性でサイトの情報を指定しよう
- (ちょっとメモ)文字コード、文字集合、エンコードについて(2)
- (ちょっとメモ)文字コード、文字集合、エンコードについて(1)
- [45-2] meta要素の charset属性で文字コードを指定しよう
- [45-1] meta要素で基本情報(メタデータ)を指定しよう
初心者にも使いやすい(と思う)レンタルサーバー
「初心者ですがレンタルサーバーはどこがいい?」というご質問をよくいただきます。
自由にファイルをアップロードできる自分のサーバがあると便利ですよね。ローカル環境じゃなくサーバ上で試してみたい時がありますからね。
私が使っているのは、
スターサーバーや ロリポップ!
です。どちらも管理画面がわかりやすく、マニュアルも充実していて、料金も安い。どちらもライトプラン以上で WordPress が使えます。
初心者が始めやすいサーバだと思います。
ちょっと料金は高いけど、さくらのレンタルサーバや、エックスサーバー
は、やはり老舗なのでおすすめです。
両方とも高スペックでコスパが良く、老舗でユーザーが多いので、質問する場がたくさんあります。初心者だけど仕事でサーバが欲しい場合は、安心なのではないかと思います。
スポンサーリンク