2011-10-31 4 views
19

javascriptでruby gsubに似た何かをする方法はありますか?特定のテンプレート変数を処理してコンテンツに置き換えるローカルのhtmlファイルがありますが、テンプレート変数を新しいコンテンツに置き換える方法がわかりません。 HTMLは以下のような断片が含まれています。私は名前のdiv要素内のすべてのテンプレート変数をラップする場合gsubに似た何かがjavascriptに存在しますか?

<div id="content"> 
    <h1>{{title}}</h1> 
    {{content}} 
</div> 

さて、私はそのコンテンツをテンプレート変数を置き換えるためにjQueryのでReplaceAllメソッドのようなものを使用することができますが、私は何をする方法を見つけ出すカントdiv内のすべての変数をラップすることなく

$( 'document').gsub( "{{title}}"、 "私はタイトルです")のようなことをしたいだけです。

誰もが考えている?

ありがとうございました!

+0

jQueryのテンプレートエンジン? http://api.jquery.com/jquery.tmpl/ –

答えて

5

あなたはDOM要素のinnerHTMLプロパティを経由して、生のHTMLにアクセスし、またはそれを包むjQueryのhtmlプロパティを使用して、置換を行うことができます。

var html = $(document).html(); 
$(document).html(html.replace('{{title}}', 'I am a title'); 

EDIT:

アンティHaapalaで指摘したようにHTML文書全体を置き換えることで、スクリプトの再読み込みのような対処したくない副作用が生じる可能性があります。したがって、あなたがさて、あなたは正規表現でString.replaceを使用することができます。:すなわち、置換を実行する前に、可能な限り最も具体的なDOM要素に

var element = $('#content'); 
var html = element.html(); 
element.html(html.replace('{{title}}', 'I am a title'); 
+0

を見てください。これはスクリプトでうまく失敗するかもしれません;) –

+0

確かに。私は通常、特定の要素を見つけ出し、その内容だけを置き換え、ドキュメントの残りの部分はそのまま残します。 – gnab

3

をドリルダウンする必要がありますが、本当に、何を使用することができますしてjQueryのテンプレートです。

http://api.jquery.com/category/plugins/templates/

+0

ありがとうAntti。これらは素晴らしいオプションのように見えますが、私のユースケースはかなりシンプルで、何とか私を逃れてきた単純な置き換えオプションが必要です。 – Nick

+1

この返信から4年が経過しても、文字列置換オプションは現在でも実用的ですが、jQueryテンプレートはJsRenderとJsViewsで廃止され、代わりに廃止されました。 – haslo

1

最近テーブルからのデータ属性(テンプレート)を取得し、その行の1つから別の値(レコードID)を注入するHandlebarsを使用する:このコードが実行をコンテキストについて

// data-row-url="http://example.com/people/{{id}}" 

var table = $(this).closest('.data_grid table');       

if(table.attr('data-row-url')) {           
    var record_id = $(this).data('record-id')       
    var show_url_template = table.data('row-url');      
    var url_template = Handlebars.compile(show_url_template)    
    var url = url_template({ id: record_id });       
    $.getScript(url);             
} 

内部からテーブルのtr要素のonclickイベントを呼び出し、クリックしたレコードをajax経由で取得します。

30

他の人は一般的に、GSUBと同等探している場合、これが唯一の最初の試合置き換えます

"aa".replace("a", "b") // "ba" 

//gをすべての一致を置き換えます。

"aa".replace(/a/g, "b") // "bb" 
"aa".replace(new RegExp("a", "g"), "b"); // "bb" 
1

私は口ひげテンプレートであるかもしれないと考えています。あなたはmustache.jsをチェックしたいかもしれません。私はあなたがJSにそれをコンパイルできるかもしれないと思う。

関連する問題