Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从url中删除参数?_Javascript_Url_Parameters - Fatal编程技术网

Javascript 如何从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

我使用了下面的代码,因此可以向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]=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”,然后您必须检查参数值是否匹配,以决定是删除还是删除并替换。检查我的最新答案。