【问题标题】:Remove a parameter to the URL with JavaScript [duplicate]使用 JavaScript 删除 URL 的参数 [重复]
【发布时间】:2013-06-01 05:20:38
【问题描述】:

原网址:

http://yourewebsite.php?id=10&color_id=1

结果网址:

http://yourewebsite.php?id=10

我得到了添加参数的功能

function insertParam(key, value){
    key = escape(key); value = escape(value);
    var kvp = document.location.search.substr(1).split('&');
    var i=kvp.length; var x; while(i--) 
    {
        x = kvp[i].split('=');

        if (x[0]==key)
        {
            x[1] = value;
            kvp[i] = x.join('=');
            break;
        }
    }
    if(i<0) {kvp[kvp.length] = [key,value].join('=');}

    //this will reload the page, it's likely better to store this until finished
    document.location.search = kvp.join('&'); 
}

但我需要删除参数

【问题讨论】:

  • 只是一个旁注——你在声明你的函数后没有打开花括号。
  • 我们需要更多细节:删除基于什么?只有最后一个?基于密钥?
  • 如果你只想要第一个参数(id),你可以split("&amp;")[0];
  • 感谢您的回复。我在这里得到了这个问题的代码-stackoverflow.com/questions/486896/…。我只是想反转代码以删除添加参数url。我不擅长 javascript。
  • 在同一个问题中,有一个类也可以删除参数:stackoverflow.com/a/487103/1266242

标签: javascript


【解决方案1】:

试试这个。只需传入要从 URL 中删除的参数和原始 URL 值,该函数就会为您删除它。

function removeParam(key, sourceURL) {
    var rtn = sourceURL.split("?")[0],
        param,
        params_arr = [],
        queryString = (sourceURL.indexOf("?") !== -1) ? sourceURL.split("?")[1] : "";
    if (queryString !== "") {
        params_arr = queryString.split("&");
        for (var i = params_arr.length - 1; i >= 0; i -= 1) {
            param = params_arr[i].split("=")[0];
            if (param === key) {
                params_arr.splice(i, 1);
            }
        }
        if (params_arr.length) rtn = rtn + "?" + params_arr.join("&");
    }
    return rtn;
}

要使用它,只需执行以下操作:

var originalURL = "http://yourewebsite.com?id=10&color_id=1";
var alteredURL = removeParam("color_id", originalURL);

var alteredURL 将是您想要的输出。

希望对你有帮助!

【讨论】:

  • 哇!谢谢。这对我真的很有帮助。非常感谢。
  • 如果它去掉所有参数,你会不想使用这一行:rtn = rtn + "?" + params_arr.join("&");你想先测试 params_arr.length > 0。
  • 您可以查看我编辑的其他答案,将您的新网址直接推送到网址栏。
  • 不错。最后通过简单检查 params_arr 长度对其进行了更改,因此我们没有得到“?”如果没有更多的获取参数。像这样: if (params_arr.length > 0) { rtn = rtn + "?" + params_arr.join("&"); }
  • 这里的负循环是故意的,for (var i = params_arr.length - 1; i &gt;= 0; i -= 1) { 如果参数被多次包含,它将被删除。
【解决方案2】:
function removeParam(parameter)
{
  var url=document.location.href;
  var urlparts= url.split('?');

 if (urlparts.length>=2)
 {
  var urlBase=urlparts.shift(); 
  var queryString=urlparts.join("?"); 

  var prefix = encodeURIComponent(parameter)+'=';
  var pars = queryString.split(/[&;]/g);
  for (var i= pars.length; i-->0;)               
      if (pars[i].lastIndexOf(prefix, 0)!==-1)   
          pars.splice(i, 1);
  url = urlBase+'?'+pars.join('&');
  window.history.pushState('',document.title,url); // added this line to push the new url directly to url bar .

}
return url;
}

这将解决您的问题

【讨论】:

  • 已将 window.history.pushState 与 stackoverflow.com/a/7171293/2067690 的替换相结合 - 效果很好。
  • 我会使用 document.location.search 而不是仅仅拆分,它需要添加这样的东西来保留哈希 if (document.location.hash) { url = url + document.location.hash ; }
  • 我会使用replaceState 而不是pushState。这是一个见仁见智的问题,但我不认为从 url 中删除一个参数应该是一个新的历史状态。
猜你喜欢
  • 2013-12-14
  • 2016-07-24
  • 1970-01-01
  • 1970-01-01
  • 2013-11-21
  • 2011-12-19
  • 1970-01-01
  • 2013-10-01
  • 2010-10-24
相关资源
最近更新 更多