JS 设置或获取URL中的参数

分别获取url中search或hash的参数

先贴代码

说明: type: 只能是search 或者 hash,对应url中window.location下的对应字段
这样的设计是因为如果js动态改变了url中search的部分,页面会刷新,而改变hash的部分不会导致页面刷新
(search就是url中井号(#)以前问号(?)以后的部分, hash是井号以后的部分, 如 www.test.com?a=1&b=2#c=3&d=4, search是?a=1&b=2,hash是#c=3&d=4)

export function getParam(type, key) {
  // 正则表达式 获取type下的字符串中key的对应值,
  const regExp = new RegExp(`[?&#]{1}${key}=(.*?)([&/#]|$)`)
  // 如果匹配不到key match方法会返回null
  const value = window.location[type].match(regExp)
  return value && value[1]
}
/**
 * 
 * @param {string} type 只能是search或者hash
 * @param {object} keyValueMap 要设置在type中的每个key,value
 */
export function setParam(type, keyValueMap) {
  // 首先获取到当前的type字符串
  let str = `${window.location[type]}`
  for (const key of Object.keys(keyValueMap)) {
    // 取出每个key,value对
    const value = keyValueMap[key]
    // 如果当前的type类型的参数中已经包含了这个key,那么修改它
    if (getParam(type, key)) {
      const regExp = new RegExp(`(.*)([#&?]${key}=)(.*?)($|&.*)`)
      const array = str.match(regExp)
      // 如果要将一个key设置成空,那么直接将它从url中移除(看需求,不必须)
      if (value === '') {
        array.splice(2, 2)
      } else { // 将匹配到的当前key对应的值替换成新的value
        array[3] = value
      }
      array.shift()
      str = array.join('')
    } else { // 如果当前没有这个key的参数,那么增加在末尾
      str = str.length !== 0
        ? `${str}&${key}=${value}`
        : `${key}=${value}`
    }
  }
  window.location[type] = str
}

没了…

正则很有用,但是用起来总要查,还要在浏览器console里试试试…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值