1

我需要添加或者,如果它已经存在,修改 URL 查询字符串的一个参数。

例如,如果我想设置param为 value 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(非压缩)对我来说太大了。

我正在寻找一个小型库来修改 url-query-strings,或者为我做这件事的一小段代码。

4

2 回答 2

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;
}
于 2012-12-16T19:57:23.347 回答
-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;
}
于 2012-12-16T19:17:17.423 回答