これにはすでに受け入れられている答えがありますが、それはjQueryを使用して動的データを挿入するコードを書くことを示唆しています。私はjQueryが大好きで、コードを書くことは問題ないこともありますが、これはテンプレートの使用に関する良い質問です。それを念頭に置いて、私はあなたの質問に答え、Transparency.jsとMustache.jsを使用してオプションを示します。
DOMで要素を維持することと、テンプレートエンジンを適用することに関しては、2つの選択肢があります。そこから開始して(HTMLとともに送信)、DOMベースのテンプレートエンジンを使用するか、script
タグにマークアップを含めて、文字列ベースのテンプレートエンジンを使用して動的に追加することができます。
最初のオプションに関しては、TransparencyやPUREなどのDOMベースのエンジンを使用してテンプレートを適用できます。透明性は、実際にはHTMLがすでにDOMにあることを想定しており、そのコンテンツをインプレースで操作します。単純なテンプレートの場合、これはうまく機能します。マークアップの要素にクラス、ID、またはその他の識別属性を追加する必要があるかどうかはあなた次第ですが、これは欠点です。これがデモンストレーションの例です:
HTML(テンプレートとして機能し、 DOMに存在します):
<div class="my-block" id="myTemplate">
<h1 class="title"></h1>
<p class="description"></p>
</div>
JavaScript(jQueryまたはjQueryのようなライブラリが含まれていることを期待):
$(function() {
var data = {
title: 'Hello',
description: 'World'
};
$('#myTemplate').render(data);
});
これがjsFiddleです:Transparency.jsの例
DOM要素にIDを追加して、DOMアクセスが少し速くなるようにすることをお勧めします。しかし、それは完全にあなた次第です。
HTMLをDOMに動的に追加することもできます。その場合は、別の方法でテンプレートを含める必要があります。簡単な方法の1つは、。付きのscript
タグを使用することtype="text/template"
です。ブラウザはこのテキストをDOMに配置しませんが、テンプレート用にコンテンツを抽出するためにjQueryなどのライブラリを使用してアクセスできます。Mustache.jsを使用して、そのアプローチを示す例を次に示します。
script
HTML(タグ内のテンプレートを含む):
<div class="my-block" id="myBlock"></div>
<script type="text/template" id="myTemplate">
<h1>{{ title }}</h1>
<p>{{ description }}</p>
</script>
JavaScript:
$(function() {
var data = {
title: 'Hello',
description: 'World'
};
var template = $('#myTemplate').html();
var html = Mustache.render(template, data);
$('#myBlock').html(html);
});
これがjsFiddleです:Mustache.jsの例
2番目の例では、テンプレート化された文字列を出力するためにDOMにプレースホルダーdivが必要ですが、動的に追加されるため、h1
または要素を含める必要はありません。p
それぞれのアプローチには明らかな利点がいくつかあります。私は個人的にTransparency.jsとその兄弟が好きですが、それはより単純なロジックのないテンプレートでのみ機能します。また、要素に属性を追加する場合も注意が必要です。CSSで同じ属性を再利用できますが、物事を少し結合し始め、それは危険です。
Mustache.jsもロジックレスですが、結果のマークアップに属性を追加する必要はありません。必要なのは、中かっこ2つでMustache構文を使用することだけです。ただし、テンプレートをタグに含める必要がありますscript
。または、Hogan.jsなどを使用してMustacheをプリコンパイルすることもできます。
最近公開したGithubPagesサイトで、Jadeと一緒に他のいくつかの例を示しました。テンプレートをページ上で直接表示し、ソースを表示して、JavaScriptでテンプレートがどのようにレンダリングされたかを確認できます。
リンク:テンプレートサンドボックス
Transparency.jsの詳細:Transparencyをお試しください
..およびMustache.js:Github上のMustache.js