摘要:JavaScript string.format
很容易可以 google到像這樣的片段:
var format = function(src){
if (arguments.length == 0) return null;
var args = Array.prototype.slice.call(arguments, 1);
return src.replace(/\{(\d+)\}/g, function(m, i){
return args[i];
});
};
不過最近需要把物件轉成 html,這樣用有點囉嗦:
format("<a href="{0}"><img alt="{2}" src="{1}" title="{2}" /></a>", obj.href, obj.src, obj.title);
自己改了一個(自以為)比較順手的工具:
function format(templete, obj) {
//console.log("arguments = ", arguments);
if (!obj) return "";
var ret = templete.replace(/\{([^\}]+)\}/g, function (m, i) {
var path = i.split("."), data = null;
if (path.length == 1) {
data = obj[i];
} else {
for (var level = 0, j = path.length; level < j; level++) {
if (data) {
data = data[path[level]];
}
else {
data = obj[path[level]];
}
}
}
return data||"";
});
//console.log("return = ", ret);
return ret;
};
// 如果有這樣的物件
var obj = {
"A": {
"P1": {
"src": "//www.google.com.tw/images/srpr/logo3w.png",
"title": "P1",
"href": "P1"
}
}
};
// 可以這樣使用
document.write(format('[a href="{A.P1.href}"][img src="{A.P1.src}" title="{A.P1.title}" alt="{A.P1.title}" /][/a]', obj));
on jsfiddle: