1.获得url中的参数
//数组法
function getParam(key){
var params = window.location.search;params = params.substr(params.indexOf("?")+1);
params = params.split("&");
for(var i=0;i<params.length;i++){
if(params[i].indexOf(key+"=")>=0){
return params[i].substr(params[i].indexOf("=")+1);
}
}
return null;//若找不到则返回null
}
//正则法
function getParam(name) {
var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
var r = window.location.search.substr(1).match(reg);
console.log(r)
if (r != null) {
return unescape(r[2]);
}
return null;
}
2. 更多时候是更新url参数,这包括添加,减出,更换,很多时候写的都很简单,但是并不严谨,比如说url中参数有a=1&aa=2,就要注意只能更换a=1,别不小心匹配正则把aa=2的后半截也换了,就变成了aa=1了,虽然这种情况不多见,但是不保证不出现,我测试了很多例子,下面写的这个应该是万无一失了,当然按规则使用~
function updateUrlPara(paras, name,value) { //传入的paras不带有?var tem = name + "=" + value
var newParas = paras
if(paras==undefined || paras =="" || paras == null) {
newParas = tem;
} else {
reg = new RegExp("(^|&)" + name + "={0,1}([^&]*)(&|$)")//这个地方的={0,1}是因为"http://www.baidu.com?a"这种情况
if(paras.match(reg)) {
newParas = paras.replace(reg, "&")
}
newParas += "&" + tem
newParas = newParas.replace(/&{2,}/g, "&").replace(/(^&*)|(&*$)/g, "")//把连续2个或以上的&替换成一个&,开头结尾的单独&去掉
}
return newParas;
}
用如下例子测试下:
var url = [
"http://www.baidu.com",
"http://www.baidu.com?",
"http://www.baidu.com?a",
"http://www.baidu.com?a=",
"http://www.baidu.com?a=1",
"http://www.baidu.com?a=1&aa",
"http://www.baidu.com?a=1&aa=2",
"http://www.baidu.com?a=1&aa=2&aaa=3",
"http://www.baidu.com?b=test&aa=2&a=1",
"http://www.baidu.com?b=test&aa=2&a=1&",
"http://www.baidu.com?&&c=haha&&b=test&aa=2&&&a=1&&&"
]
for(var i=0; i<url.length; i++) {
let j = url[i].indexOf("?")
let _url = url[i], paras = ""
if(j!=-1) {
_url = _url.substr(0, j)
paras = url[i].substr(j+1, url[i].length)
}
let newUrl =_url + "?" + updateUrlPara(paras, "a", "999");
console.log(newUrl)
}
结果如下:
通过~