添加/更改URL的参数并重定向到新URL

Dra*_*ven 20 javascript jquery append

如果&view-allURL中不存在该参数,我需要将其与值一起添加到URL的末尾.如果它存在,那么我需要能够在不创建新URL的情况下更改值,因为它可能会或可能不会在其之前有其他参数.

我找到了这个功能,但我无法让它工作:https://stackoverflow.com/a/10997390/837705

这是我使用上面的函数的代码(我无法工作):http://jsfiddle.net/Draven/tTPYL/4/

我知道如何附加参数和值:

<div onclick="javascript: window.location.assign(window.location.href+='&view-all=Yes');">Blah Blah</div>

更多信息:

如果URL是,http://www.domain.com/index.php?action=my_action那么默认的"&view-all"值将为"Yes",因此当他们点击按钮时,他们将被定向到的URL是http://www.domain.com/index.php?action=my_action&view-all=Yes.

如果是URL,http://www.domain.com/index.php?action=my_action&view-all=Yes那么当他们点击按钮时它将变为http://www.domain.com/index.php?action=my_action&view-all=No???

编辑:请举个例子.我不知道很多JS,我只是想不出用PHP做的方法.

Laj*_*pad 62

function setGetParameter(paramName, paramValue)
{
    var url = window.location.href;
    var hash = location.hash;
    url = url.replace(hash, '');
    if (url.indexOf(paramName + "=") >= 0)
    {
        var prefix = url.substring(0, url.indexOf(paramName + "=")); 
        var suffix = url.substring(url.indexOf(paramName + "="));
        suffix = suffix.substring(suffix.indexOf("=") + 1);
        suffix = (suffix.indexOf("&") >= 0) ? suffix.substring(suffix.indexOf("&")) : "";
        url = prefix + paramName + "=" + paramValue + suffix;
    }
    else
    {
    if (url.indexOf("?") < 0)
        url += "?" + paramName + "=" + paramValue;
    else
        url += "&" + paramName + "=" + paramValue;
    }
    window.location.href = url + hash;
}
Run Code Online (Sandbox Code Playgroud)

在onclick事件中调用上面的函数.

  • @Piero这是因为没有在代码中的错误:下面的行必须重写变种后缀= url.substring(url.indexOf(PARAMNAME))子串(url.indexOf( "=")+ 1);.两行:var suffix = url.substring(url.indexOf(paramName)); suffix = suffix.substring(suffix.indexOf("=")+ 1); (6认同)
  • 我修复了一个小错误,该函数错误地处理了URL中的_#_,并将参数设置在URL的末尾,它应该在_#_之前设置.我把新功能放在这个pastebin中:http://pastebin.com/3R96LKZu (4认同)

Jam*_*mie 8

当您可以让浏览器为您解析查询字符串时,为什么还要自己解析查询字符串呢?

function changeQS(key, value) {
    let urlParams = new URLSearchParams(location.search.substr(1));
    urlParams.set(key, value);
    location.search = urlParams.toString();
}
Run Code Online (Sandbox Code Playgroud)

  • 大多数浏览器也支持这一点,应该是公认的答案。 (2认同)

小智 5

所有以前的解决方案都没有考虑参数中子字符串的可能性。例如http://xyz?ca=1&a=2不会选择参数 a 而是 ca。这是通过参数并检查它们的函数。

function setGetParameter(paramName, paramValue)
{
  var url = window.location.href;
  var hash = location.hash;
  url = url.replace(hash, '');
  if (url.indexOf("?") >= 0)
  {
    var params = url.substring(url.indexOf("?") + 1).split("&");
    var paramFound = false;
    params.forEach(function(param, index) {
      var p = param.split("=");
      if (p[0] == paramName) {
        params[index] = paramName + "=" + paramValue;
        paramFound = true;
      } 
    });
    if (!paramFound) params.push(paramName + "=" + paramValue);
    url = url.substring(0, url.indexOf("?")+1) + params.join("&");
  }
  else
    url += "?" + paramName + "=" + paramValue;
  window.location.href = url + hash;
}
Run Code Online (Sandbox Code Playgroud)