- 正常情況下的url:http://www.itdecent.cn/p/e61315e04444
- 拼接參數(shù)的 http://www.itdecent.cn/p/e61315e04444?a=1
- 或者這樣的 http://www.itdecent.cn/p/e61315e04444?a=1&b=2&c=3&d=4
- 總的來說:是key=value的形式
- 實現(xiàn)
function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) {
return decodeURI(r[2]);
} else {
return null;
}
}
-
細節(jié)
- 其中
"(^|&)" + name + "=([^&]*)(&|$)"
含義:取以name開頭或者以&開頭以&或者以$結(jié)尾的字符串
(^|&):匹配字符串開頭或者&字符,如果其后還有正則,那么必須出現(xiàn)在字符串開始或&字符之后
([^&]*):[^&]匹配除了&之外的任意字符,([^&]*)匹配除了&之外的任意字符 0或多次
(&|$):匹配以&或者以$結(jié)尾的字符串
i:表示匹配時不區(qū)分大小寫 -
window.location.search.substr(1).match(reg)的意思是找出?之后匹配reg的字符串 -
substr(start,end):截取字符串 -
match()方法可在字符串內(nèi)檢索指定的值,或找到一個或多個正則表達式的匹配,返回一個數(shù)組 - 該方法類似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。
-
decodeURIComponent(r[2])的意思是對所選的字符串進行解碼
- 其中
獲取
var value= getQueryString("key");url相關參數(shù)
location對象 含有當前URL的信息. 屬性 href 整個URL字符串.
protocol 含有URL第一部分的字符串,如http:
host 包含有URL中主機名:端口號部分的字符串.如//www.cenpok.net/server/
hostname 包含URL中主機名的字符串.如http://www.cenpok.net ;
port 包含URL中可能存在的端口號字符串.
pathname URL中"/"以后的部分.如~list/index.html
hash "#"號(CGI參數(shù))之后的字符串.
search "?"號(CGI參數(shù))之后的字符串.遇到問題
少數(shù)情況,出現(xiàn),打開網(wǎng)頁,url將&解析成&,造成該方法無法獲取到url攜帶的參數(shù)
&是html中的或者url地址欄中的轉(zhuǎn)義字符,就是代表&的意思
即本來url為http://www.itdecent.cn/p/e61315e04444?a=1&b=2&c=3&d=4
被解析為http://www.itdecent.cn/p/e61315e04444?a=1&b=2&c=3&d=4解決辦法
截取掉amp;,再使用該方法
function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
/* 添加了中間這段代碼*/
if (window.location.search.indexOf("amp;")) {
var reg01 = new RegExp("amp;", "g");
var url = window.location.search.replace(reg01,"");
r = url.substr(1).match(reg);
}
/*添加了中間這段代碼*/
if (r != null) {
return decodeURI(r[2]);
} else {
return null;
}
}