1、采用正則,這也是現在使用最為方便的
function getQueryString(name) { const reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); const urlObj=window.location; var r =urlObj.href.indexOf('#')>-1? urlObj.hash.split("?")[1].match(reg) : urlObj.search.substr(1).match(reg); if (r != null) return unescape(r[2]); return null; }
首先是定義一個正則,將傳入的參數傳入其中。
然后就是window.location.search,search()是查找字符串指定的字符,默認返回第一個字符的位置,如果沒有則返回-1,不過這里的search卻不是這樣使用的,我們把window.location打印出來看一下
很明顯window.location是一個對象,其中search是它的一個屬性,對應的是href中?及以后的字符。
然后就是substr(1),substr(index,num)是截取從index開始數量為num的字符,index是必須的,num不填的情況下默認返回之后所有的,所以substr(1)就是返回?以后的字符
math()用來返回字符串匹配的結果,如果找到了就返回數組,在加g的全局情況下,返回所有結果,在沒有全局的情況下返回[匹配文本、文本相關信息]以及兩個屬性index就是找到的位置,input就是用來查找的字符串。
最后就是返回查找到的相關信息,不過為什么是match返回數組的第三個數,還不是很懂,有人懂話可以交流一下。非常感!
2、利用循環
function GetRequest() { var url = location.search; //獲取url中"?"符后的字串 var theRequest = new Object(); if (url.indexOf("?") != -1) { var str = url.substr(1); strs = str.split("&"); console.log(strs) for(var i = 0; i < strs.length; i ++) { theRequest[strs[i].split("=")[0]]=unescape(strs[i].split("=")[1]); } } return theRequest; }
首先就是跟正則一樣,獲取“?”及之后的字符,然后就是創建一個新的對象用來存儲一會解析的字符信息,然后就是利用“&”將其分割為數組開始循環,再將其個根據“=”進行切割,並將其設為在之前新建對象的屬性。最后返回對象就可以了。