2012-12-16 33 views
1

我需要添加或,如果它已經存在,修改URL查詢字符串的一個參數。javascript/jquery修改查詢字符串參數

如果我例如要設置param的價值newvalue

http://example.org/file.php應導致http://example.org/file.php?param=newvalue

http://example.org/file.php?abc=def應導致http://example.org/file.php?abc=def&param=newvalue

http://example.org/file.php?param=oldValue應導致http://example.org/file.php?param=newvalue

我知道關於URI.js庫,但它'最小的21kb大小(非gziped)對我來說太大了。

我正在尋找一個小型庫來修改url-query-strings或一小段代碼,它爲我做到了這一點。

+0

如果你只是做它對於一個特定的參數,只需使用字符串操作或正則表達式。 –

+0

我在想,當file.php完成加載後,調用一個ajax調用file.php?... blabla ...&param = new value,但它會循環,除非您檢查$ _GET param = newvalue。 ..我不知道如何快速編寫這個想法 –

+0

你需要改變url的外觀或者真正的重新指引和重新運行腳本嗎? –

回答

1

下面是所有JS的解決方案,但它將使意義,使這個組合JS/PHP腳本

var myParam = "foo" 
var oldValue = "bar" 
var newValue = "fighters" 

var queryPairs = window.location.search.substr(1).split("&"); 
var queryParams = []; 
queryPairs.forEach(function(element, index, array){ 
    var pair = element.split("="); 
    queryParams[pair[0]] = pair[1]; 
}) 

if (queryParams[myParam] == oldValue){ 
    queryParams[myParam] = newValue; 
    queryPairs = []; 
    for (var index in queryParams){ 
     queryPairs.push(index + "=" + queryParams[index]); 
    } 
    var baseUrl = window.location.href.split("?")[0]; 
    var newSearch = queryPairs.join("&") 
    var newUrl = baseUrl + "?" + newSearch 
    window.location = newUrl; 
} 
+0

來簡單地分配myParam,如果它尚未設置(如果已設置,則不會復位),可以將表達式if(queryParams [myParam] == oldValue)'更改爲'if (typeof(queryParams [myParam])==「undefined」)' –

-1

我的(很長)版本:

if (location.search.match(/([?&]param)=([^&#]*)/g)) { 
    location.search = location.search.replace(/([?&]param)=([^&#]*)/g, '$1=' + newvalue); 
} else if (location.search.match(/([&][^&#]*)=/g)) { 
    location.search = location.search + "&param=" + newvalue; 
} else { 
    location.search = location.search + "?param=" + newvalue; 
}