今天碰到获取地址参数的问题,所以总结了一下。
第一种情况:获取地址栏参数
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就是上面列出的几个。
以上就是这次的总结,欢迎大家交流、使用,有更好的方法欢迎讨论~