2011-04-27 55 views
1

jQuery有一個param()函數,我正在尋找類似的功能。我需要在我的對象中返回一個url。例如:jquery - 從參數構建漂亮的網址

url: function() { 
    return this.baseUrl + '?' + $.param({page: this.page, perPage: this.perPage}); 
}, 

這將在example.com/?page=1&perPage=5或類似的形式返回的URL。我如何形成網址example.com/page/1/perpage/5

回答

2

您可以創建自己的功能:

function build(base, params) { 
    for(var k in params) { 
     if(params.hasOwnProperty(k)) { 
      base += '/' + k + '/' + params[k]; 
     } 
    } 
    return base; 
} 

唯一的問題是,該參數的順序不能保證(這不是查詢字符串的問題,但可能是這類網址)。如果base已經以斜線結尾,您可能還想添加一個檢查。

1

只是一個想法:)

'example.com/?page=1&perPage=5'.replace(/[&=]/g,'/').replace('?','') 
.toLowerCase(); 
+0

+1有趣的想法。唯一的問題可能是如果問號是參數值的一部分。 – 2011-04-27 20:41:13

+0

絕對的,但這仍然是使用'.param'的美麗 - 因爲'?'是一個URL中的保留字符,它將被jquery轉義:'document.write($。param({'blah':'lol ?hi'}));' – 2011-04-27 20:50:27

+0

有趣。因爲實際上在查詢字符串中,'?'不必轉義(afaik)。但很高興知道jQuery確實可以逃脫它。謝謝:) – 2011-04-27 20:55:59

0

粘性這在端:

replace(/[&=]/g,'/').replace('?','') 

像這樣:

url: function() { 
    return (this.baseUrl + '?' + $.param({page: this.page, perPage: this.perPage})).replace(/[&=]/g,'/').replace('?',''); 
}, 

編輯在重新費利克斯·克林的有關關切地指出?'s: 這隻會刪除FIRST?留下任何其他的是查詢字符串INTACT的一部分。完全安全使用。

+0

對。我忘了JavaScript對我來說很奇怪,關於替換字符......感謝您再次指出這一點! – 2011-04-27 23:48:16