第一版:
采用正则表达式获取地址栏参数因为工作中遇到要获取地址栏中的query参数,所以直接列出代码:
function getQueryString(name){
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var l = window.location.search.substr(1);
var r = l?l.match(reg):null;
if(r!=null){
return unescape(r[2]);
}
return null;
}
写完之后发现在带有
#
的hash
路由项目中window.location.search
为空,所以更新一下
第二版
function getQueryString(name){
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var l = window.location.href.split('?')[1];
var r = l?l.match(reg):null;
if(r!=null){
return decodeURIComponent(r[2]);
}
return null;
}
后经验证如果像vue 这类项目URL如果有多个
?
并且?
在#
前,那么第一个?
将不起作用,所以vue项目改成如下方法
function getQueryString(name){
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var l = window.location.hash.split('?')[1];
var r = l?l.match(reg):null;
if(r!=null){
return decodeURIComponent(r[2]);
}
return null;
}
补充一些小知识点:
1.unescape:
定义:对通过 escape()
编码的字符串进行解码。如下例:
unescape('c=%7B%22n%22%3A%22news%22%7D');
//得到 c={"n":"news"}
但是ECMAScript v3 已从标准中删除了 unescape() 函数,并反对使用它,因此应该用
decodeURI()
和decodeURIComponent()
取而代之。
2.decodeURI
定义:对 encodeURI() 函数编码过的 URI 进行解码
decodeURI('c=%7B%22n%22%3A%22news%22%7D');
//得到 c={"n"%3A"news"}
3.decodeURIComponent
定义:对 encodeURIComponent() 函数编码的 URI 进行解码。
decodeURIComponent('c=%7B%22n%22%3A%22news%22%7D');
//得到 c={"n":"news"}
另外再补充一个小东西:时间格式2018-07-25在
iOS
上不支持,替换为2018/07/25
即可