window.location.search 为何在url 带# 号时获取不到 ?
- 我们在获取url参数时,会常常用到截取参数
getUrlParam(name) { const reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)') // 构造一个含有目标参数的正则表达式对象 const r = window.location.search.substr(1).match(reg) // 匹配目标参数 if (r != null) { return unescape(r[2]) // 返回参数值 } else { return null } }
2. 但这样 window.location.search 这样常常会获取不到。
原因是; search只能在取到“?”后面和“#”之前的内容,如果“#”之前没有“?”search取值为空。它默认参数和#是一个字符串
3.完善
function getQueryString(key) { var after = window.location.search; if(after.indexOf('?') === -1) return null; //如果url中没有传参直接返回空 //key存在先通过search取值如果取不到就通过hash来取 after = after.substr(1) || window.location.hash.split("?")[1]; if(after) { var reg = new RegExp("(^|&)"+ key +"=([^&]*)(&|$)"); var r = after.match(reg); if(r != null) { return decodeURIComponent(r[2]); } else { return null; } } }
4.对于没有#号url ,最好的是方法是:
let data = {}; let src = window.location.href let index = src.indexOf("?"); if (index === -1) { return data; } let dataStr = src.substring(src.indexOf("?") + 1); let dataArray = dataStr.split("&"); for (let i = 0; i < dataArray.length; i++) { let param = dataArray[i].split("="); data[param[0]] = param[1]; } // urlData 是{} 放在data中。 this.urlData = data
作者:人参,每篇随笔皆原创(除非注明原作者的随笔),欢迎指正!