查詢字符串轉(zhuǎn)對(duì)象
接下來(lái)給大家介紹一個(gè)封裝的函數(shù),可以通過(guò)這個(gè)函數(shù)將一個(gè)url地址中的查詢字符串提取出來(lái),并且轉(zhuǎn)換為一個(gè)對(duì)象。
總所周知,url地址的組成為:
協(xié)議://域名:端口/資源路徑?查詢字符串#hash
通過(guò)這個(gè)我們可以發(fā)現(xiàn),查詢字符串在url地址中是在“?”后面“#”號(hào)的前面,但是查詢字符串和#hash都是可以有可無(wú)的,所以我們就需要先進(jìn)行一個(gè)判斷,然后再進(jìn)行接下來(lái)的操作。在判斷之前我們需要先獲取“?”和“#”在url字符串中的索引位置。
var star = url.indexOf("?"),//查詢字符串起始位置索引
end = url.indexOf("#");//查詢字符串結(jié)束位置索引
然后再判斷“?”和“#”是否存在。
if(star === -1) //判斷是否存在查詢字符串,返回-1則不存在
return null;
star += 1;//后面用slice()方法截取查詢字符串,所以我們需要將star的值加一
if(end === -1) //判斷是否有#hash
end = url.length;
判斷結(jié)束之后就可以進(jìn)行轉(zhuǎn)換了,代碼如下
var str = url.slice(star, end);//截取查詢字符串
str = str.split("&");//將字符串切割為一個(gè)一個(gè)的等式
var obj = {};
for(var i in str){
var strs = str[i].split("=");//將等式切割為左右兩個(gè)元素,左邊的是對(duì)象的name,右邊則是相應(yīng)的值
obj[strs.shift()]=strs.shift();//添加到對(duì)象中
}
return obj;
這樣,這個(gè)函數(shù)就定義好了。
注:slice(start,end)方法是從索引為start的位置截取到索引為end的位置,包括start,但是不包括end。
歡迎關(guān)注微信公眾號(hào):猴哥說(shuō)前端