2014-02-11 81 views
0

我想要從URL查詢字符串中獲取數據並將其顯示在HTML文檔的正文中。我無法讓腳本用空格替換+號。替換數組值

實例網址:www.mywebsite.com/?item=Sandwich &麪包=白+麪包

在HTML體,爲項目的文本字段會顯示「三明治」,但文本字段麪包會顯示「白+麪包。」我如何用空格替換+號?

這裏的IM使用使用這種從URL

function querystring(key) { 
    var re=new RegExp('(?:\\?|&)'+key+'=(.*?)(?=&|$)','gi'); 
    var r=[], m; 
    while ((m=re.exec(document.location.search)) != null) r.push(m[1]); 
    return r; 
} 

    $("span.item").text(querystring('item')); 
    $("span.bread").text(querystring('bread')); 

我試圖獲得價值的功能,但它告訴我陣列沒有替換功能。

.replace(/\+/g, ' ') 
+2

這是因爲數組沒有一個替代方法。你在哪裏嘗試使用'.replace()'調用?如果你把它放在while循環中(比如'r.push(m [1] .replace(...))',它可能會起作用。另外,爲什麼不使用許多用戶定義的函數之一,創建的功能,這已經解析了嗎?有一些優化從查詢字符串中檢索密鑰的價值,以及更好的支持這樣的事情例如 - http://stackoverflow.com/questions/901115/how (我喜歡第二個答案) – Ian

+0

也許我沒有正確理解這個問題,但爲什麼不使用'encodeURI()/ decodeURI()'? – ochi

+0

謝謝,艾倫。我嘗試搜索,但我想我沒有搜索正確的標籤。該解決方案效率更高,對我來說非常適合。 – Narong

回答

3

你的函數返回一個數組,試圖通過這種改變是:

function querystring(key) { 
    var re=new RegExp('(?:\\?|&)'+key+'=(.*?)(?=&|$)','gi'); 
    var r=[], m; 
    while ((m=re.exec(document.location.search)) != null) r.push(m[1]); 
    return r[0]; 
} 

那麼你可以使用你的替代

.replace(/\+/g, ' ') 
+0

這是針對我的問題的有效解決方案,但請參閱Allan Kimmer Jensen的評論問題以獲得更好的解決方案。謝謝! – Narong

0

我會像這樣的東西取代你的功能,爲了可讀性,擺脫正則表達式。它處理未定義的鍵/值,並且可以輕鬆地將其第一部分重構爲返回當前document.location.search字典的parseQueryString函數。

function querystring(key) { 
    var hash = {}; 

    var pairs = document.location.search.substr(1).split('&'); 
    for(var i = 0; i < pairs.length; i++) { 
     var tuple = pairs[i].split('='); 
     hash[tuple[0]] = tuple[1]; 
    } 

    var val = hash[key]; 
    return (val) ? val.replace(/\+/g, ' ') : undefined; 
} 

用法:

querystring('bread'); 
> White Bread