JavaScriptでインスタンスの生成・操作ができるHTMLテンプレートを用意できる「template要素」を使ってみます。
対応ブラウザ
template要素の対応ブラウザはこちら
IEでは非対応ですが、それ以外の主要ブラウザは問題なく使えそうです。
サンプルコード
実際にtemplate要素を使ってみます。
まずはHTMLです。
<div id="article-list"></div> <template id="article-template"> <div class="article-item"> <h2 class="article-ttl"></h2> <p class="article-url">公式サイト:<a href=""></a></p> </div> </template>
#article-template内がテンプレートで、このテンプレートを使って#article-list内に記事一覧を出力する想定です。
template要素内は特に非表示の対応などを行わなくても、ページ上には表示されません。
次にJavaScriptで操作してみます。
今回は配列のデータを一覧で出力してみます。
var articleData = [
{
"title": "とある科学の超電磁砲T",
"url": "https://toaru-project.com/railgun_t/"
}, {
"title": "ランウェイで笑って",
"url": "https://runway-anime.com/"
}, {
"title": "ダーウィンズゲーム",
"url": "https://darwins-game.com/"
}
];
// ブラウザがtemplate要素に対応しているか確認
if ('content' in document.createElement('template')) {
// template要素を取得
var template = document.getElementById('article-template');
var fragment = document.createDocumentFragment();
for (var i = 0; i < articleData.length; i++) {
// template要素からコンテンツを複製
var clone = document.importNode(template.content, true);
// 複製した各要素に値を設定
clone.querySelector('.article-ttl').textContent = articleData[i]['title'];
clone.querySelector('.article-url a').textContent = articleData[i]['url'];
clone.querySelector('.article-url a').href = articleData[i]['url'];
fragment.appendChild(clone);
}
document.getElementById('article-list').appendChild(fragment);
// template要素に対応していない場合
} else {
console.log('template要素に対応していません。');
}
これで#article-list内に一覧を出力することができました。
template要素のデモページ
コメントが承認されるまで時間がかかります。