// 获取URL的参数
function getAllUrlParams(url) {
// 从url(可选)或window对象获取查询字符串
var queryString = url ? url.split('?')[1] : window.location.search.slice(1);
// 我们把参数保存在这里
var obj = {};
// 如果查询字符串存在
if (queryString) {
// 查询字符串不包含#后面的部分,因此去掉它
queryString = queryString.split('#')[0];
// 把查询字符串分割成各部分
var arr = queryString.split('&');
for (var i=0; i<arr.length; i++) {
// 分离出key和value
var a = arr[i].split('=');
// 考虑到这样的参数:list[]=thing1&list[]=thing2
var paramNum = undefined;
var paramName = a[0].replace(/\[\d*\]/, function(v) {
paramNum = v.slice(1,-1);
return '';
});
// 设置参数值(如果为空则设置为true)
var paramValue = typeof(a[1])==='undefined' ? true : a[1];
// (可选)保持大小写一致
// paramName = paramName.toLowerCase();
// paramValue = paramValue.toLowerCase();
// 如果参数名已经存在
if (obj[paramName]) {
// 将值转成数组(如果还是字符串)
if (typeof obj[paramName] === 'string') {
obj[paramName] = [obj[paramName]];
}
// 如果没有指定数组索引
if (typeof paramNum === 'undefined') {
// 将值放到数组的末尾
obj[paramName].push(paramValue);
}
// 如果指定了数组索引
else {
// 将值放在索引位置
obj[paramName][paramNum] = paramValue;
}
}
// 如果参数名不存在则设置它
else {
obj[paramName] = paramValue;
}
}
}
return obj;
}
在调用这个方法时:
var lonat = getAllUrlParams('http://abc.com?a=abc').a; // 返回abc