一、将Url参数变成对象
思路:用正则将参数变成JSON字符串,然后再解析成对象(只考虑简单情况,不包括同名参数)。
实现:
let sUrl = 'www.baidu.com?a=1&b=2&c=3&d=4'
function serializeUrlParam(sUrl) {
let indexStart = sUrl.indexOf('?')
if(indexStart==-1){return {}};
let k = sUrl.slice(indexStart+1);
let x = k.replace(/&/g, '","').replace(/=/g, '":"');
let y = '{"' + x + '"}';
return JSON.parse(y);
}
二、获取 url 中的参数(?后,#后前)复杂版:
- 指定参数名称,返回该参数的值 或者 空字符串
- 不指定参数名称,返回全部的参数对象 或者 {}
- 如果存在多个同名参数,则返回数组
function getUrlParam(sUrl, sKey) {
//let k =location.search?location.search.slice(1):'';
let index = sUrl.indexOf('?');
let index1 = sUrl.indexOf('#')>0?sUrl.indexOf('#'):sUrl.length;
let k = sUrl.slice(index+1, index1);
let y = k.split('&');
let p = {};
y.forEach(function(i){
let j = i.indexOf('='),
m = i.slice(0,j)
n = i.slice(j+1)
if(p[m]){
if(typeof(p[m])!='object'){
let arr =[];
arr.push(p[m]);
arr.push(n);
p[m] = arr
}else{
p[m].push(n)
}
}else{
p[m]=n;
}
})
return sKey?(p[sKey]?p[sKey]:''):p
}
测试结果: