6

我有一个这样的网址:

http://google.de/test.php?a=b&c=d&e=f

我知道只需要像这样修改一个 GET 参数:(c是“h”而不是“d”)

http://google.de/test.php?a=b&c=h&e=f

并重定向到新的网址。所有其他 GET 参数应保持不变。

我要怎么做?

4

8 回答 8

11

如其他答案中所述,我同意最好为此目的使用库。

但是,如果您需要更简单的快速修复,这里有一个基于正则表达式的字符串替换解决方案。

var url = "http://my.com/page?x=y&z=1&w=34";

var regEx = /([?&]z)=([^#&]*)/g;
var newurl = url.replace(regEx, '$1=newValue');

在这里,我将查询字符串键 'z' 替换为 'newVlaue'

看看这个小提琴:http: //jsfiddle.net/BuddhiP/PkNsx

于 2012-11-25T14:35:24.133 回答
1

如前所述,window.location.search将为您提供?包含的查询字符串。

然后我会将它们变成一个对象(可能使用像http://github.com/medialize/URI.js这样的库),以便更轻松地使用参数。像var params = { key: value, key1: value1}

然后,您可以修改所需的值并将键值对转换回查询字符串。

在此之后,您可以使用window.location将用户移动到下一页。

于 2012-11-25T14:11:40.480 回答
1

PHP 的一个鲜为人知的特性是现有参数的后一个命名会覆盖前一个。

有了这些知识,您可以执行以下操作:

location.href = location.href + '&c=h';

简单的。

于 2012-11-25T14:31:35.000 回答
0

我已经整理了一个非常简单的方法,但它只适用于您想要实现的目标:

var url = 'http://google.de/test.php?a=b&c=d&e=f';
var gets =  url.split('.php?');
var ge = gets[1].split('&');
var change = ge[1].split('=');
var change[1] = 'h';
var newUrl = url[0] + '.php?' + ge[0] + '&' + change[0] + '=' + change[1] + '&' + ge[2];
于 2012-11-25T14:17:20.147 回答
0

你可以尝试这样的事情:

var changed = "h"; // you can vary this GET parameter

var url = "http://google.de/test.php?a=b&e=f&c=" + changed; // append it to the end

window.location = newurl; // redirect the user to the url
于 2012-11-25T14:28:31.740 回答
0

因为你的参数可以在任何地方。所以这会很好

url="http://google.de/test.php?a=b&c=d&e=f";
url=url.replace(/&c=.*&/,"&c=h&")
于 2012-11-25T14:40:40.847 回答
0

设置或更新 URL/QueryString 参数,并使用 HTML history.replaceState() 更新 URL

你可以尝试这样的事情:

var updateQueryStringParam = function (key, value) {
    var baseUrl = [location.protocol, '//', location.host, location.pathname].join(''),
        urlQueryString = document.location.search,
        newParam = key + '=' + value,
        params = '?' + newParam;

    // If the "search" string exists, then build params from it
    if (urlQueryString) {
        keyRegex = new RegExp('([\?&])' + key + '[^&]*');

        // If param exists already, update it
        if (urlQueryString.match(keyRegex) !== null) {
            params = urlQueryString.replace(keyRegex, "$1" + newParam);
        } else { // Otherwise, add it to end of query string
            params = urlQueryString + '&' + newParam;
        }
    }
    window.history.replaceState({}, "", baseUrl + params);
};
于 2016-12-20T17:12:10.640 回答
-1

location.href = location.origin+location.pathname+location.search;

将 location.search 替换为您的新参数,例如 "?foo=bar&tic=tac"

于 2015-03-11T15:28:02.783 回答