用JavaScript按一定格式解析出URL 串中所有的参数
1、先看看location对象
2、其中的search属性就获取当前URL的查询部分(问号?之后的部分)
3、改造location.search
比如当前URL为:https://www.hao123.com/?name=leaf&age=12,获取age的值
location.search.substring(1).split('&')[1].split('=')[1]。 当然可以用循环获取所有想要字段的值
4、不用location.search,封装一个param函数,解析出给你url的参数;
//如定的url: 'http://www.baidu.com/?user=leaf&age=10&id=123&id=456&city=%E5%8C%97%E4%BA%AC&d&student'; //解析出: //要求: // 重复出现的 key 要组装成数组,能被转成数字的就转成数字类型 // 解析出中文 // 未指定值的 key 约定值为 true { user: 'anonymous', age:10, id: [123, 456], city: '北京', student: true, }
//demo
function parseURL(str){ //如果参数不是对象。返回空对象 if(typeof str!='string'){ return {} } var paramObj = {},//保存最终输出的对象 _str = str.substr(str.indexOf('?')+1); //解析中文 paraArr = decodeURI(_str).split("&"); var tmp , key, value, newValue; for(var i=0, len=paraArr.length; i<len;i++){ tmp = paraArr[i].split("="); key = tmp[0]; value = tmp[1]||true; //处理数字'100'=>100 if(typeof value === 'string' && isNaN(Number(value)) === false){ value = Number(value); } //如果key没有出现过(可能是0 或者false) if(typeof paramObj[key] === "undefined"){ paramObj[key] = value; }else{ newValue = Array.isArray(paramObj[key]) ? paramObj[key] : [paramObj[key]]; newValue.push(value); paramObj[key] = newValue; } } return paramObj; }
//结果
5、简单小巧的正则的方法
function getQuerystring(name){ let reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); let arg = window.location.search.substr(1).match(reg); if(arg!=null){ return unescape(r[2]); }else{ return null; } }
如URL:www.hao123.com/dist/redPacket/inviteShare.html?code=B197FD&from=singlemessage
getQuerystring('code') //B197FD