js获取url参数 兼容某些带#url

网上有大把现成的代码,不过有点小小的瑕疵

例如目前最流行的 正则法:  

function getArgument(_arg)
{
     var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
     var r = window.location.search.substr(1).match(reg);
     if(r!=null)return  unescape(r[2]); return "";
}

但是当URL中 包含#的时候会失效,例如 http://abc.def.com/kkk/#dfff?id=123344

原因是在获取?后的字符串使用了:

window.location.search

但是现在因为有了# 而# 后面的部分作为了 hash值, 所以用 loaciton.search取不到值了

所以 要兼容这种情况就不能再这样取,用原始的办法取一次,

兼容版如下:

function getArgument(_arg) 
{
	var _t=window.location.href.split("?")
	if(_t.length>1)
	{
	 	var reg = new RegExp("(^|&)"+ _arg +"=([^&]*)(&|$)");
     	     var r = _t[1].match(reg);
     	     if(r!=null)return  unescape(r[2]); return "";
	}
	return "";
}

注意 我这里在返回结果是进行了unescape 解码,如果不需要请删除!

没有值的时候返回"";

原文地址:https://www.cnblogs.com/luoeeyang/p/5070904.html