2011-09-01 24 views
1

我有JavaScript API,用戶通過URL調用它們。我可能需要更換URL的某些部分,比如他們可能會打電話給我的ajax的照片上傳API與他們的上傳網址:Javascript/jQuery庫替換文本中的變量

http://www.example.com/photos/upload/${username};jsessionid=l2k34523 

然後我需要張貼到URL我的代碼上傳照片時,更換$ {用戶名}。我可以告訴他們如何在URL中格式化該用戶名變量,但我必須允許他們像這樣插入變量。

是否有一個很好的Javascript或jQuery庫來輕鬆替換上面的變量?

回答

0

簡單format功能,可以爲你做的伎倆......

// add String prototype format function if it doesn't exist yet 
if (jQuery.isFunction(String.prototype.format) === false) 
{ 
    String.prototype.format = function() { 
     var s = this; 
     var i = arguments.length; 
     while (i--) 
     { 
      s = s.replace(new RegExp('\\{' + i + '\\}', 'gim'), arguments[i]); 
     } 
     return s; 
    }; 
} 

所以,你可以很容易地只是用它作爲:

".../photos/upload/{0};jsessionid=l2k34523".format("JohnDoe"); 

或多個變量:

".../photos/upload/{0};jsessionid={1}".format("JohnDoe", "l2k34523"); 
+1

令人敬畏的功能,儘管它似乎不需要命名變量。請注意,它通常不是擴展原生對象原型的jQuery方法。通常你會附加一個函數到jQuery對象。對於功能來說並不重要,但很好將所有代碼保存在相同樣式的IMO中。 –

+0

@Michael:我同意你的觀點,但是**首先,**據我所知,命名實體可能已被用於人類的可讀性。如果引入自動化,則不需要命名實體。編號的可以很容易地使用。 **其次**我同意擴展本地對象是不好的做法,但如果你控制這個並保持它低,沒有理由不這樣做的事情。但是,否則,**我會建議避免這樣的事情以及**。通常。 –

+0

@Michael:對於命名實體(就像他使用它們一樣),他們可以很容易地使用[jQuery tmpl插件](http://api.jquery.com/category/plugins/templates/),這將做到這一點 - 轉換模板字符串與命名實體,並把實際值。但它似乎有點麻煩,如果他們不使用它在任何地方更強大。這樣的簡單功能將使他們的代碼更簡單,更快捷。 –