前端JS获取URL参数的4种方法总结


Posted in Javascript onApril 05, 2022

前言

对于前端来说,无论是在面试或者工作中都可能遇到处理 url 参数的问题,使用框架进行项目开发时或许不用,有自带的获取参数方式,但是抛开使用框架来说我们也可以使用原生 js 方式或者借用第三方库来实现参数的获取并对象化,下面就对具体用法进行介绍整理。

方法1: 字符串 split 方法

因为一个 url 地址是字符串形式的,所以利用 split 方法将参数提取出来,该方法比较常用,而且容易理解(对于不太会使用正则的我来说,haha~)

let URL = "http://www.baidu.com?name=张三&age=25&sex=男&wife=小红"
function getUrlParams(url) {
    // 通过 ? 分割获取后面的参数字符串
    let urlStr = url.split('?')[1]
    // 创建空对象存储参数
	let obj = {};
    // 再通过 & 将每一个参数单独分割出来
	let paramsArr = urlStr.split('&')
	for(let i = 0,len = paramsArr.length;i < len;i++){
        // 再通过 = 将每一个参数分割为 key:value 的形式
		let arr = paramsArr[i].split('=')
		obj[arr[0]] = arr[1];
	}
	return obj
}
console.log(getUrlParams(URL))

前端JS获取URL参数的4种方法总结

方法2: 利用 URLSearchParams 方法

在 MDN 中结合两种方法实现参数的获取:1. 使用 new URLSearchParams(url) 方法,返回一个 URLSearchParams 对象,再调用 entries() 方法返回一个可迭代对象(Iterator);2. 使用 Object.fromEntries(iterable) 方法转化为普通对象

let URL = "http://www.baidu.com?name=Jack&age=25&sex=men&wife=Lucy"
function getUrlParams2(url) {
	let urlStr = url.split('?')[1]
	const urlSearchParams = new URLSearchParams(urlStr)
	const result = Object.fromEntries(urlSearchParams.entries())
	return result
}
console.log(getUrlParams2(URL))

前端JS获取URL参数的4种方法总结

特别的:URLSearchParams 方法不仅可以获取参数,还可以将参数对象转为 字符串,详细用法可查看 MDN 中的介绍,并且该方法存在浏览器兼容性问题。

方法3: 利用正则匹配方法

正则匹配功能强大相信很多小伙伴都知道,不仅可以实现在登录注册时的账号、密码、邮箱、手机号等等的验证,还可以非常方便的处理一些字符串(校验、替换、提取等操作),难点在于对正则使用的熟练度,这里就是通过正则提取字符串中需要的字符

let URL = "http://www.baidu.com?name=Tom&friend=Jerry"
function getUrlParams3(url){
	// \w+ 表示匹配至少一个(数字、字母及下划线), [\u4e00-\u9fa5]+ 表示匹配至少一个中文字符
	let pattern = /(\w+|[\u4e00-\u9fa5]+)=(\w+|[\u4e00-\u9fa5]+)/ig;
	let result = {};
	url.replace(pattern, ($, $1, $2)=>{
		result[$1] = $2;
	})
	return result
}
console.log(getUrlParams3(URL))

前端JS获取URL参数的4种方法总结

方法4: 使用第三方库 qs

使用第三方库 qs 也可以实现 url 中参数字符的提取,还能实现将参数对象转为 url 参数形式,需要注意的是浏览器 cdn 方式引入时是默认添加到全局对象 window 的 Qs 属性上的

<script src="https://cdn.bootcdn.net/ajax/libs/qs/6.10.3/qs.min.js"></script>
<script>
let URL = "http://www.baidu.com?product='iPhone 13 Pro'&price=¥9999.00"
function getUrlParams4(url){
	// 引入 qs 库时会默认挂在到全局 window 的 Qs 属性上
	// console.log(window)
	let urlStr = url.split('?')[1]
	let result = Qs.parse(urlStr)
	// 拼接额外参数
	let otherParams = {
		num:50,
		size:6.1
	}
	let str = Qs.stringify(otherParams)
	let newUrl = url + str
	return {result,newUrl}
}
console.log(getUrlParams4(URL))
</script>

前端JS获取URL参数的4种方法总结

总结:

到此这篇关于前端JS获取URL参数的4种方法的文章就介绍到这了,更多相关前端获取URL参数内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
关于extjs treepanel复选框选中父节点与子节点的问题
Apr 02 Javascript
web网页按比例显示图片实现原理及js代码
Aug 09 Javascript
js数组的基本操作(很全自己整理的)
Oct 16 Javascript
AngularJS的表单使用详解
Jun 17 Javascript
jquery仿QQ登录账号选择下拉框效果
Mar 22 Javascript
理解javascript中的Function.prototype.bind的方法
Feb 03 Javascript
JS实现JSON.stringify的实例代码讲解
Feb 07 Javascript
利用JS对iframe父子(内外)页面进行操作的方法教程
Jun 15 Javascript
JS实现数组的增删改查操作示例
Aug 29 Javascript
快速解决layui弹窗按enter键不停弹窗的问题
Sep 18 Javascript
小程序如何定位所在城市及发起周边搜索
Feb 11 Javascript
微信小程序实现日历小功能
Nov 18 Javascript
threejs太阳光与阴影效果实例代码
JS实现数组去重的11种方法总结
Apr 04 #Javascript
vue使用wavesurfer.js解决音频可视化播放问题
Apr 04 #Vue.js
JavaScript模拟实现网易云轮播效果
Javascript中Microtask和Macrotask鲜为人知的知识点
vue中div禁止点击事件的实现
Apr 02 #Vue.js
Vue组件更新数据v-model不生效的解决
Apr 02 #Vue.js
You might like
php使用pdo连接并查询sql数据库的方法
2014/12/24 PHP
PHP用FTP类上传文件视频等的简单实现方法
2016/09/23 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
2019/06/12 PHP
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
2019/12/03 PHP
js库Modernizr的介绍和使用
2015/05/07 Javascript
老生常谈遮罩层 滚动条的问题
2016/04/29 Javascript
Angularjs 实现分页功能及示例代码
2016/09/14 Javascript
Bootstrap 网站实例之单页营销网站
2016/10/20 Javascript
Bootstrap基本组件学习笔记之列表组(11)
2016/12/07 Javascript
浅谈jQuery中事情的动态绑定
2017/02/12 Javascript
Es6 Generator函数详细解析
2018/02/24 Javascript
Vue 按键修饰符处理事件的方法
2018/05/04 Javascript
vue实现分页加载效果
2019/12/24 Javascript
单线程JavaScript实现异步过程详解
2020/05/19 Javascript
[00:43]TI7不朽珍藏III——幽鬼不朽展示
2017/07/15 DOTA
[48:51]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第一场 11.28
2020/12/02 DOTA
python爬虫常用的模块分析
2014/08/29 Python
Python之Web框架Django项目搭建全过程
2017/05/02 Python
Python实现感知器模型、两层神经网络
2017/12/19 Python
浅谈Python黑帽子取代netcat
2018/02/10 Python
使用Python来开发微信功能
2018/06/13 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
结合OpenCV与TensorFlow进行人脸识别的实现
2019/10/10 Python
Python基于stuck实现scoket文件传输
2020/04/02 Python
瑞典时尚服装购物网站:Miinto.se
2017/10/30 全球购物
Troy-Bilt官网:草坪割草机、吹雪机、分蘖机等
2019/02/19 全球购物
Etam艾格英国官网:法国著名女装品牌
2019/04/15 全球购物
先进党支部事迹材料
2014/01/13 职场文书
预备党员公开承诺书
2014/05/28 职场文书
锦旗标语大全
2014/06/23 职场文书
民主生活会批评与自我批评总结
2014/10/17 职场文书
职代会闭幕词
2015/01/28 职场文书
稽核岗位职责
2015/02/10 职场文书
民主评议教师党员自我评价
2015/03/04 职场文书
2016教师校本研修心得体会
2016/01/08 职场文书
nginx之内存池的实现
2022/06/28 Servers