1、获取单个参数:
function getParam(name, url) {
if(typeof name !== 'string') return false;
if (!url) url = window.location.href;
// 当遇到name[xx]时,对方括号做一下转义为 name\[xxx\],因为下面还需要使用name做正则
name = name.replace(/[\[\]]/g, '\\$&');
var regex = new RegExp('[?&]' + name + '(=([^]*)|&|#|$)');
var results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
getParam('query','https://juejin.im/search?query=hello&time=2017-11-12')
//输出:hello
2、获取多个参数:
function getParams(names, url) {
if(typeof name !== 'string') return false;
var names = names.split(' ');
var result = {};
var i = 0,
len = names.length;
if (names.length === 0) return false;
for (; i < len; i++) {
result[names[i]] = getParam(names[i], url);
}
return result;
}
getParams('query time','https://juejin.im/search?query=hello&time=2017-11-12')
//输出:{query: "hello", time: "2017-11-12"}
3、设置单个参数:
function setParam(name, val, url) {
if(typeof name !== 'string') return false;
if (!url) url = window.location.href;
var _name = name.replace(/[\[\]]/g, '\\$&');
var value = name + '=' + encodeURIComponent(val);
var regex = new RegExp(_name + '=[^&]*');
var urlArr = url.split('#');
var result = '';
if(regex.exec(url)){
result = url.replace(regex, value);
}else{
result = urlArr[0]+'&'+value+ (urlArr[1] || '');
}
return result
}
setParam('query','world','https://juejin.im/search?query=hello&time=2017-11-12')
// output:
// "https://juejin.im/search?query=world&time=2017-11-12"
4、设置多个参数:
function setParams(obj, url) {
var result = url || '';
if (Object.prototype.toString.call(obj) !== '[object Object]') return false;
for (var name in obj) {
result = setParam(name, obj[name], result);
}
return result;
}
setParams({a:111,b:222,query:'world'},'https://juejin.im/search?query=hello&time=2017-11-12')
// output:
// "https://juejin.im/search?query=world&time=2017-11-12&a=111&b=222"