js获取URL参数值的几种方式

示例URL
query:https://editor.csdn.net/?a=1&b=2&c=3
hash:https://editor.csdn.net/#a=4&b=5&c=6

方法一:采用正则表达式获取地址栏参数 (代码简洁,重点正则)

function getUrlParam(name, type = 0) {
  let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"),
      paramHash = window.location.hash.split("#")[1] || "",
      paramSearch = window.location.search.split("?")[1] || "",
      param;

  param = type === 0 ? paramSearch : paramHash;

  let result = param.match(reg);

  if (result != null) {
    return result[2].split("/")[0];
  }
  return null;
}

console.log(getUrlParam('a'));// 1
console.log(getUrlParam('b'));// 2

console.log(getUrlParam('a'), 1);// 4
console.log(getUrlParam('b'), 1);// 5

new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); 正则表达式详解:

  1. 其中的正则表达式用到了字符串拼接
    (^|&) 表示行首或以&开头
    name 表示传进来的变量
    = 表示要获取值的参数名后面的等号
    ([^&]*) 表示非&的任意个字符 (0到多个)
    (&|$) 表示以&结束或者行尾
  2. paramSearchparamHash 得到 URL 中 ?# 后面的内容
    比如 paramSearch 为: name=hufi&age=18,假设此时传进来的参数为 name,则:
    result[0] = "name=hufi&"整个 正则表达式匹配到的内容
    result[1] = "" 是正则表达式中第一个括号匹配到的内容,即 (^|&) 匹配到的内容
    result[2] = "hufi" 是正则表达式中第二个括号匹配到的内容,即 ([^&]*) 匹配到的内容
    result[3] = "&" 是正则表达式中最后一个括号匹配到的内容即 (&|$) 匹配到的内容

方法二:split拆分法 (代码较复杂,较易理解)

function getRequest() {
   const url = location.search; //获取url中"?"符后的字串
   let theRequest = new Object();
   if (url.indexOf("?") != -1) {
      let str = url.substr(1);
      let strs = str.split("&");
      for(let i = 0; i < strs.length; i ++) {
      	 let strsArr = strs[i].split("=");
         theRequest[strsArr[0]] = unescape(strsArr[1]);
      }
   }
   return theRequest;
}
console.log(getRequest());
/*
{a: "1", b: "2", c: "3"}
*/

方法三:split拆分法(易于理解,代码中规)

function getQueryString(name){
    let query = window.location.search.substring(1);
    let vars = query.split("&");
    for (let i = 0; i < vars.length; i++) {
        let pair = vars[i].split("=");
        if(pair[0] == name)
        	{return pair[1];}
   }
   return(false);
}
 console.log(getQueryString('a));// 1
 console.log(getQueryString('b));// 2

方法四:使用URLSearchParams API

它会返回给我们一个 URLSearchParams 对象。

方法
该接口不继承任何属性。

  • URLSearchParams.append() 插入一个指定的键/值对作为新的搜索参数。
  • URLSearchParams.delete() 从搜索参数列表里删除指定的搜索参数及其对应的值。
  • URLSearchParams.entries() 返回一个iterator可以遍历所有键/值对的对象。
  • URLSearchParams.get() 获取指定搜索参数的第一个值。
  • URLSearchParams.getAll() 获取指定搜索参数的所有值,返回是一个数组。
  • URLSearchParams.has() 返回 Boolean 判断是否存在此搜索参数。
  • URLSearchParams.keys() 返回iterator 此对象包含了键/值对的所有键名。
  • URLSearchParams.set() 设置一个搜索参数的新值,假如原来有多个值将删除其他所有的值。
  • URLSearchParams.sort() 按键名排序。
  • URLSearchParams.toString() 返回搜索参数组成的字符串,可直接使用在URL上。
  • URLSearchParams.values() 返回iterator 此对象包含了键/值对的所有值。

官方示例

var paramsString = "q=URLUtils.searchParams&topic=api"
var searchParams = new URLSearchParams(paramsString);

for (let p of searchParams) {
  console.log(p);
}

searchParams.has("topic") === true; // true
searchParams.get("topic") === "api"; // true
searchParams.getAll("topic"); // ["api"]
searchParams.get("foo") === null; // true
searchParams.append("topic", "webdev");
searchParams.toString(); // "q=URLUtils.searchParams&topic=api&topic=webdev"
searchParams.set("topic", "More webdev");
searchParams.toString(); // "q=URLUtils.searchParams&topic=More+webdev"
searchParams.delete("topic");
searchParams.toString(); // "q=URLUtils.searchParams"

使用

const params = new URLSearchParams(location.search.replace(/\?/ig, "")); // location.search = "?name=young&sex=male"
params.has("young"); // true
params.get("sex"); // "male"
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前端JS可以通过以下几种方法获取URL参数: 1. 使用自己封装的方法getUrlParams(url)。这个方法会将URL中的参数解析成一个对象,对象的属性是参数名,属性值是参数值。可以通过调用getUrlParams(url)来获取URL参数的对象。\[1\] 2. 使用getQueryVariable(variable)函数。这个函数会返回URL中指定参数名的参数值。可以通过调用getQueryVariable(variable)来获取指定参数名的参数值。\[2\] 3. 使用getParameterURL(str)函数。这个函数会返回URL中指定参数名的参数值。可以通过调用getParameterURL(str)来获取指定参数名的参数值。\[3\] 以上三种方法都可以根据需要选择使用,根据不同的情况来获取URL参数。 #### 引用[.reference_title] - *1* [前端JS截取url上的参数](https://blog.csdn.net/qq_43291759/article/details/131022820)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [JS获取url参数](https://blog.csdn.net/zhouwei922/article/details/123471379)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [前端javascript获取url参数](https://blog.csdn.net/listennerBGM/article/details/91045805)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值