Javascript 如何从url中删除参数?
我使用了下面的代码,因此可以向url添加多个参数Javascript 如何从url中删除参数?,javascript,url,parameters,Javascript,Url,Parameters,我使用了下面的代码,因此可以向url添加多个参数 函数setParam(名称、值){ var l=窗口位置; /*构建参数*/ var params={}; 变量x=/(?:\?)([^=&?]+)=?([^&?]*)/g; var s=l.搜索; 对于(var r=x.exec;r;r=x.exec)) { r[1]=解码元件(r[1]); 如果(!r[2])r[2]='%%'; 参数[r[1]]=r[2]; } /*设置参数*/ params[name]=encodeURIComponen
函数setParam(名称、值){
var l=窗口位置;
/*构建参数*/
var params={};
变量x=/(?:\?)([^=&?]+)=?([^&?]*)/g;
var s=l.搜索;
对于(var r=x.exec;r;r=x.exec))
{
r[1]=解码元件(r[1]);
如果(!r[2])r[2]='%%';
参数[r[1]]=r[2];
}
/*设置参数*/
params[name]=encodeURIComponent(值);
/*构建搜索*/
var搜索=[];
for(参数中的变量i)
{
var p=成分(i);
var v=参数[i];
如果(v!='%%')p+='='+v;
搜索推送(p);
}
search=search.join('&');
/*执行搜索*/
l、 搜索=搜索;
}
这是从问题中得出的:
但是,需要添加哪些附加脚本,以便再次单击同一超链接时删除url中的参数?在本例中为“?priceMin=300”您可以尝试添加一个
if
块,如果搜索已经存在,则该块将清除搜索;如果搜索为空,则允许添加参数:
function setParam(name, value) {
var l = window.location;
if (l.search) {
l.search = ''
return
}
...
}
如果您有多个参数,Hero Qu的回答将重置整个参数列表 执行此操作的方法是检查该特定参数是否存在,然后删除它,否则添加它 我修改了下面的代码以考虑多个参数
<script>
function setParam(name, value) {
var l = window.location;
/* build params */
var params = {};
var x = /(?:\??)([^=&?]+)=?([^&?]*)/g;
var s = l.search;
for (var r = x.exec(s); r; r = x.exec(s)) {
r[1] = decodeURIComponent(r[1]);
if (!r[2]) r[2] = '%%';
params[r[1]] = r[2];
}
/** Check to see if the param exist already
Delete if it exist, set it, if it doesn't
**/
if (params[name] && value == params[name]) {
delete params[name];
} else if (params[name] && value != params[name]) {
delete params[name];
params[name] = encodeURIComponent(value);
} else {
params[name] = encodeURIComponent(value);
}
/* set param */
/* build search */
var search = [];
for (var i in params) {
var p = encodeURIComponent(i);
var v = params[i];
if (v != '%%') p += '=' + v;
search.push(p);
}
search = search.join('&');
/* execute search */``
l.search = search;
}
</script>
<a href="javascript:setParam('priceMin', 200);">add priceMin=200</a>
<br />
<a href="javascript:setParam('priceMin', 300);">add priceMin=300</a>
<br />
<a href="javascript:setParam('priceMax', 400);">add priceMax=400</a>
函数setParam(名称、值){
var l=窗口位置;
/*构建参数*/
var params={};
变量x=/(?:\?)([^=&?]+)=?([^&?]*)/g;
var s=l.搜索;
对于(var r=x.exec;r;r=x.exec)){
r[1]=解码元件(r[1]);
如果(!r[2])r[2]='%%';
参数[r[1]]=r[2];
}
/**检查参数是否已经存在
如果存在则删除,如果不存在则设置
**/
if(params[name]&&value==params[name]){
删除参数[名称];
}else if(params[name]&&value!=params[name]){
删除参数[名称];
params[name]=encodeURIComponent(值);
}否则{
params[name]=encodeURIComponent(值);
}
/*设置参数*/
/*构建搜索*/
var搜索=[];
for(参数中的变量i){
var p=成分(i);
var v=参数[i];
如果(v!='%%')p+='='+v;
搜索推送(p);
}
search=search.join('&');
/*执行搜索*/``
l、 搜索=搜索;
}
Javascript已经有URL对象。如果需要,可以附加参数
像这样
const newUrl = new URL(window.location.href);
function setParam(name, value, option = 'add') {
var paramexist = newUrl.searchParams.has(name);
if (option == 'remove') {
newUrl.searchParams.delete(name);
return newUrl;
}
(!paramexist) ? newUrl.searchParams.append(name, value) : newUrl.searchParams.set(name, value);
return newUrl;
}
console.log(setParam('priceMin', 300));
console.log(setParam('priceMin', 300,'remove'))
到目前为止,您尝试了什么?这非常接近,谢谢-这很有效,但是如果我添加第二个priceMin呢。当前,使用此代码,单击第二个选项将从url中将其删除,而不是将其交换到“?priceMin=400”,然后您必须检查参数值是否匹配,以决定是删除还是删除并替换。检查我的最新答案。