使用 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("&")[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 >= 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 的参数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何删除 URL 中的参数并将其显示在地址栏中而不会导致 Javascript 中的重定向?
使用 post 参数导航到 Javascript 中的新 URL [重复]