小记--获取url键值

以后会不定期把项目中用到的也是我们平时开发常用的一些方法贴出来,也是一个自我总结的过程

获取url键值是我们在项目会经常遇到的需求。下面是我在项目中封装的方法,详细的说明在代码都有注释。点这里

/**
 * 获取url键值
 * url => [href] | [param]
 * 不填参数则返回JSON 格式所有数据
 */
const urlCodeToObj = url => {
    let u = url || window.location.href
    //判断url是完整的链接还是传入的参数
    if (RegExp(/^((https|http)?:\/\/)/).test(u)) {
    //将url中的空格去掉并匹配'?'后面的参数字符串集合
    	const search = u.replace(/^\s+|\s+$/, '').match(/([^?#]*)(#.*)?$/)
    	if (!search) {
    		search = {}
    	}
    	//把匹配到的字符串以'&'分割变换成数组形式
    	let searchHash = search[1].split('&');
    	let paramObj = {} //键值对对象集合
    	for (let item of searchHash) {
            const pair = item.split('=')
            if (pair[0]) {
            	const key = decodeURIComponent(pair[0])
            	const value = pair[1]
            	if (value != undefined) {
	            value = decodeURIComponent(value)
            	}
            }
            //判断转化后的paramObj里面有没有重复的属性
            if (key in paramObj) {
            	if (paramObj[key] instanceof Array) {
                    //把属性值变为数组,将另外的属性值也存放到数组中去
                    paramObj[key] = [paramObj[key]]
            	}
            	paramObj[key].push(value)
            } else {
            	paramObj[key] = value
            }
    	}
    	return paramObj
    } else {
    	//返回单个属性值 string
    	if (RegExp(/^\w+/).test(u)) {
            //匹配属性值,比如http://xxx.com/web/page/prodetail.html?num=200&productID=4690&id=100
            //输入值为 &productID=4690&,然后进行匹配.
            let reg = new RegExp(`(^|&)${u}=([^&]*)(&|$)`,"i")
            const matchArr = window.location.search.substr(1).match(reg)
            if (matchArr != null) return (matchArr[2])
            return null
    	}
    }
}
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值