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