【发布时间】:2013-02-14 16:47:49
【问题描述】:
几天前我写了一个简单的模板函数,现在的问题是空格会杀死标签。因此,当我输入这样的内容时:<div id="str">#{my} #{name} #{is} #{#{a}}</div> 它运行良好,但以下内容却不行:<div id="str">#{my} #{name} #{is} #{ #{a} }</div>。
这是我到目前为止所做的:
$.tmpl = function(str, obj) {
do {
var beforeReplace = str;
for(var key in obj) {
str = str.replace("#{" + key + "}", obj[key]);
}
var afterReplace = str !== beforeReplace;
} while (afterReplace);
return str;
};
var map = {
my: "Am",
name: "I",
is: "<a href='#'>awesome</a>",
a: "#{b}",
b: "c",
c: "?"
};
$("#str").html(function(index, oldhtml) {
$(this).html( $.tmpl(oldhtml, map) );
});
如果我使用#{a} 和#{ #{a} },我怎样才能让它工作。
我知道,这是可能的,甚至很简单,但是我不是正则表达式专家。
这个works。
这个fails。
【问题讨论】:
-
Underscore.js provides a template system 也许这就是你所需要的:)
-
@Ghommey 当然,但我喜欢这个解决方案,而且我经常遇到这个问题;)
-
“会杀死标签”是什么意思?你能提供一个jsfiddle吗?
-
@Ghommey 标签不再被替换...我更新了我的问题。
标签: jquery regex replace template-engine str-replace