2011-03-18 66 views
2

我需要一個JavaScript函數,可以插入像原型js框架一樣。任何人都有一個不依賴於原型的插值函數? Jquery是受歡迎的。謝謝。插值函數需要

+1

你可能有更好的運氣,如果你真的告訴我們這個功能應該做的。 – Andrea 2011-03-18 20:32:08

回答

1

根據您的需求,這樣的事情可能工作:

String.prototype.interpolate = function(valueMap){ 
    return this.replace(/\{([^}]+)\}/g, function(dummy, v){ 
    return valueMap[v]; 
    }); 
}; 

用法:

var params = { 
    "speed":"slow", 
    "color":"purple", 
    "animal":"frog" 
}; 
var template = "The {speed} {color} fox jumps over the lazy {animal}."; 
alert(template.interpolate(params)); 

//alerts: 
//"The slow purple fox jumps over the lazy frog." 

這將爲{named}項目裹在你的字符串括號提供基本的插值。

注:這是一個基本的實現,不應該在字符串或參數並不安全的情況下(例如,如果你要建立一個SQL語句或東西)

0

如果你不使用關注安全問題(eval()不嚴重的代碼是一件好事):

evalfun = function (x) { 
    return eval(x); 
}; 

String.prototype.interpolate = function (fn) { 
    return this.replace(/\{([^}]+)\}/g, 
    function (dummy, v) { 
     return fn(v); 
    } 
); 
}; 

var world = "room" 
"hello {world}".interpolate(evalfun);