2012-04-02 55 views
1

我希望执行搜索并替换为字符串。它搜索任何以“$”开头的单词并将其替换为数组中的值。例如,如果字符串是:Javascript将字符串的部分替换为变量

[div class='news'][h4]$title[/h4][p]$desc[/p][/div] 

它将[]更换为<>(已完成)。但是,我希望它用数组中的数据替换$ title。所以data [“title”]和$ desc将被数据[“desc”]替代。 代码我迄今为止是

var obj = $('#'+id); 
var url = $(obj).attr('loadJSON'); 
var format = $(obj).attr('responseFormat'); 
$.getJSON(url, function(data) { 
    var html = ""; 
    for(var i=0;i<data.length;i++) { 
     var tmp = format; 
     tmp = tmp.replace(/\[+(.*?)\]+/g,"<$1>"); 
     tmp = tmp.replace(); 
    } 
}); 

格式是它将替换字符串,和数据(从JSON响应)是我想要的变量发生变化到阵列。

有人可以帮助我吗?在此先感谢

回答

4

再加入如上次更换

tmp = tmp.replace(/\$([a-z]+)/gi, function(match, v) { 
    return data[v] || v; 
}) 

注意,在data[v]情况下是不明确的,你可以返回别的东西像data[v] || ["not found", v].join(' ')只是跟踪哪些变量缺失

+0

这完美的作品,谢谢:) – 2012-04-02 12:39:14

+0

作为预留建议你可以使用* {$ VAR} *代替,因为microtemplating中更广泛的使用sytntax – fcalderan 2012-04-02 12:40:50

+0

我会这样做,但是首先使用已经使用{$ var}的模板系统从PHP生成html文件,因此我必须使用稍微不同的东西。谢谢你的建议,虽然 – 2012-04-02 12:42:12

0

我不是JS专家,但这在很多方面看起来都是错误的......你的数据对象应该是一个JS对象,就像{ title: 'Generic title.', description: 'It's a generic title' }

为什么不将值放入段落元素中,然后将它们插入到div中(即将它们附加到它们中)。事情是这样的:

$.getJSON(url, function(data) { 
    $('div.news').append($('<p />').text(data.title)); 
    $('div.news').append($('<p />').txt(data.description)); 
}); 
+1

数据对象是一个JS对象,它通过AJAX从外部源加载,我希望这个功能可以很容易地集成到外部内容格式的任何conatainer。例如,我可以使用相同的JS函数加载数据并将其插入表格 – 2012-04-02 12:43:39

0

你可以做

tmp = tmp.replace(/\$([a-z]+)/gi, function(match) { 
    match = match.replace('$', ''); 
    return (data[match] || match) 
}); 

http://jsfiddle.net/uZbk8/

+0

如果您使用的是捕获组,则可以将其他参数传递给回调并避免内部替换 – fcalderan 2012-04-02 12:44:17

+0

@FabrizioCalderan是的,我看到(和upvoted)你的答案,它好多了! :) – 2012-04-02 12:46:31