获取或删除url的某个参数

例如:

正常的url:https://www.cnblogs.com/morango;

如果加了某些特定的参数,就变成了这样:https://www.cnblogs.com/morango?a=1;

或者带多个参数:https://www.cnblogs.com/morango?a=1&b=2;

又或者根据项目需求集成了 应用的情况:https://www.cnblogs.com/morango?service=a%3D1(a%3D1指的是编码后的service)

但上述各种情况都有一个规律:后面拼接的都是key=value的形式。

下面是不同情况取值的方法函数:

1、根据url中的参数名称获取 对应的值

// 根据QueryString参数名称获取值
getQueryStringByName(name) {
  let result = window.location.search.match(
    new RegExp("[?&]" + name + "=([^&]+)", "i")
  );
  if (result == null || result.length < 1) {
    return "";
  }
  return result[1];
},

//假设当前url:https://www.cnblogs.com/morango?a=1&b=2
//方法调用
let test = this.getQueryStringByName('a')
console.log(test)            //输出  1

2、变形---->

当路径中包含两个同名参数时,例如:

https://www.cnblogs.com/morango?service=1&service2=2

此时带了两个service的情况下,用第一种的方法会出现  第二个service参数值丢失的情况。因此,这里在上述基础上做了一些修改:

// 根据QueryUrl参数名称获取含多个同名name的值
getQueryUrl(name) {
  let result = window.location.search.match(
    new RegExp("[?&]" + name + "=([^&]+)", "i")
  );
  if (result == null || result.length < 1) {
    return "";
  }
  const input = result.input;
  let startIdx = name.length + 1;
  const url = input
    ? input.substring(input.indexOf(name) + startIdx, input.length)
    : "";
  return url;
},

//假设当前url:https://www.cnblogs.com/morango?service=1&service2=2
//方法调用
let test = this.getQueryUrl('service')
console.log(test)            //输出  1&service2=2

 

3、删除url路径中的某个参数值

//删除url中key为name的对应键值对参数,并返回剩下的url  
delUrlByName(name) {
    var loca = window.location;
    var baseUrl = loca.origin + loca.pathname;
    var query = loca.search.split('?')[1];
    if(!query) {
      return loca;
    }
    if(loca.href.indexOf(name) > -1) {
      var obj = {};
      var arr = query.indexOf('&') > -1? query.split('&') : [query];    //根据&分割,这里的service是unicode编码过得,不存在内部出现&的情况(会被转义成%)
      for(var i= 0; i < arr.length; i++) {
        arr[i] = arr[i].split("=")
        obj[arr[i][0]] = arr[i][1]
      };
      delete obj[name];
      let str = JSON.stringify(obj) === '{}'? "" : "?";
      var url = baseUrl + str + JSON.stringify(obj).replace(/[\"\{\}]/g, "").replace(/\:/g, "=").replace(/\,/g, "&");
      return url;
    }
  },
  //假设当前url:https://www.cnblogs.com/morango?value=123&value2=456
  //方法调用
  let test = this.delUrlByName('value')
  console.log(test)        //输出https://www.cnblogs.com/morango?value2=456

 

posted @ 2021-10-28 19:55  Morango  阅读(1319)  评论(0)    收藏  举报
*{cursor: url(https://files-cdn.cnblogs.com/files/morango/fish-cursor.ico),auto;}