JS获取地址参数

时间:2021-11-07 10:41:32

今天碰到获取地址参数的问题,所以总结了一下。

第一种情况:获取地址栏参数

function getUrlParam(name){
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
var r = window.location.search.substr(1).match(reg); //匹配目标参数
if (r!=null) return unescape(r[2]); return null; //返回参数值
}

调用的时候直接getUrlParam("参数名")就可以。挺好用,网上基本都是这个方法。

不过这个方法只能获取地址栏的参数,因为window.location.search是一个私有方法:

输入:http://www.js-51.com/news/2012-5/GUANLIRUANJIANYAOBUYAOBAYIYONGXINGFANGZAIZHONGYAOWEIZHI.html?q=all&l=zh-cn#go

1 href
全部URl字符串(在浏览器中就是完整的地址栏)
返回: http://www.js-51.com/news/2012-5/GUANLIRUANJIANYAOBUYAOBAYIYONGXINGFANGZAIZHONGYAOWEIZHI.html?q=all&l=zh-cn#go 2 protocol
URL 的协议部分
返回:http: 3 host
URL 的主机部分
返回:www.js-51.com 4 port
URL 的端口部分
假如采用默认的80端口(即使添加了:80),那么返回值并不是默认的80而是空字符
返回:"" 5 pathname
URL 的路径部分(就是文件地址)
返回:/news/2012-5/GUANLIRUANJIANYAOBUYAOBAYIYONGXINGFANGZAIZHONGYAOWEIZHI.html?q=all&l=zh-cn#go 6 search
查询(参数)部分
返回:?q=all&l=zh-cn 7 hash
锚点
返回:#go 

(详细可以查看JS解析url,写的还是比较详细的)

第二种情况:获取地址参数

我碰到这个情况是 获取一个列表元素中的地址,并在模态框中iframe打开这个地址。这时window.location.search就不能用了,所以我略作了修改

function getParam(place,name){
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); //构造一个含有目标参数的正则表达式对象
var r = place.substr(place.indexOf("?")+1).match(reg); //匹配目标参数
if (r!=null) return unescape(r[2]); return null; //返回参数值
}

这样就可以获取任意位置的类似地址栏的参数,使用的时候就getParam("place","name")。

place就是想要获取的地址,eg:

var val = $(this).find("a").attr("value");
var id = getParam(val,"id");
console.log(id) 如果想要获取地址栏的参数,place参数可以写window.location.href或者window.location.search就是上面列出的几个。

以上就是这次的总结,欢迎大家交流、使用,有更好的方法欢迎讨论~