window.location.search 为何在url 带# 号时获取不到 ?

  1. 我们在获取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

  

原文地址:https://www.cnblogs.com/panax/p/11792252.html