使用 JavaScript 删除 URL 的参数 [重复]

Posted

技术标签:

【中文标题】使用 JavaScript 删除 URL 的参数 [重复]【英文标题】:Remove a parameter to the URL with JavaScript [duplicate] 【发布时间】: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]; 感谢您的回复。我在这里得到了这个问题的代码-***.com/questions/486896/…。我只是想反转代码以删除添加参数url。我不擅长 javascript 在同一个问题中,有一个类也可以删除参数:***.com/a/487103/1266242 【参考方案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 与 ***.com/a/7171293/2067690 的替换相结合 - 效果很好。 我会使用 document.location.search 而不是仅仅拆分,它需要添加这样的东西来保留哈希 if (document.location.hash) url = url + document.location.hash ; 我会使用replaceState 而不是pushState。这是一个见仁见智的问题,但我不认为从 url 中删除一个参数应该是一个新的历史状态。 这似乎更容易做到developer.mozilla.org/en-US/docs/Web/API/URLSearchParams/delete

以上是关于使用 JavaScript 删除 URL 的参数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JavaScript 中删除查询字符串参数?

如何删除 URL 中的参数并将其显示在地址栏中而不会导致 Javascript 中的重定向?

如何使用 javascript 替换以前的 URL 参数?

使用 post 参数导航到 Javascript 中的新 URL [重复]

JavaScript 使用JavaScript获取URL参数

JavaScript 使用JavaScript获取URL参数