2011-10-31 41 views
19

有什么办法可以在JavaScript中做类似于ruby gsub的东西吗?我有一个本地html文件,我想处理并用内容替换某些模板变量,但我无法弄清楚如何用新内容替换模板变量。 HTML中包含类似下面的片段:在JavaScript中是否存在与gsub类似的东西?

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

现在,如果我包每个模板变量在一个名为div的话,我可以使用像jQuery的的replaceAll方法,其内容替换模板变量,但我无法弄清楚如何做它没有包装div中的每个变量。

我只想做一些像$('document').gsub(“{{title}}”,“我是标题”)。

任何人有任何想法?

感谢您的帮助!

+0

jQuery中的模板引擎?看看http://api.jquery.com/jquery.tmpl/ –

回答

5

您可以访问通过一个DOM元素的innerHTML财产,或使用jQuery的html财产的原始的HTML包装,然后进行替代:

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

编辑:

正如安蒂·哈帕拉指出,替换整个文档HTML会产生你不想处理的副作用,如重新加载脚本。因此,你应该深入到最具体的DOM元素来进行替换前可能,即:

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

这可能会失败严重的脚本;) –

+0

的确。我通常会找到一个特定元素并仅替换它的内容,而不改变文档的其余部分。 – gnab

3

好了,你可以使用带有与string.replace正则表达式,但实际上,你可以使用jQuery的是模板。

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

+0

谢谢Antti。这些看起来像一个很好的选择,但我的用例相当简单,只需要简单的替换选项,以某种方式设法逃脱我。 – Nick

+1

虽然在回复四年后,字符串替换选项仍然是当前可行的,但jQuery模板已被弃用,并被JsRender和JsViews取代。 – haslo

1

我最近使用Handlebars采取从表中的数据属性(模板)和其行注入另一个值(记录ID):

// 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。

相关问题