2012-12-16 36 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; 
}