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