'use strict';
/* url相关 */
/** @module url */
/**
* 获取url链接里的参数
* @param {String} name 参数名
* @return {String} 参数对应的值
* @example
* var name = url.getUrlParam('name');
*/
function getUrlParam(name) {
// eslint-disable-next-line
const reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
const r = window.location.search.substr(1).match(reg); // search,查询?后面的参数,并匹配正则
if (r != null)
return unescape(r[2]);
return null;
}
/**
* getUrlParamsStr,获取当前url链接里的所有参数的数组
* @return {String} 所有参数的字符串.
*/
function getUrlParamsStr() {
return window.location.search == '' ? '' : location.search.slice(1);
}
/**
* parseJson2Str,将json转换成url参数
* @param {Object} json - 要转换的json对象
* @return {String} 转换出来的字符串
* @example
* var str = url.parseJson2Str({name:2});
* console.log(str);
*/
function parseJson2Str(json) {
return Object.keys(json).map(function (key) {
let value = json[key];
return encodeURIComponent(key) + '=' + encodeURIComponent(value);
}).join('&');
}
/**
* parseStr2Json,将str参数转换成json
* @param {String} str - 要转换的str字符串
* @return {Object} 转换出来的json
* @example
* var json = url.parseStr2Json('name=2'}');
* console.log(json);
*/
function parseStr2Json(str = '') {
let arr = str.split('&'), res = {};
for (let i = 0; i < arr.length; i++) {
if(arr[i]){
res[arr[i].split('=')[0]] = arr[i].split('=')[1];
}
}
return res;
}
/**
* 将url转换成json信息
* @param {String} url 要转换的url
* @return {Object} 转换出来的json
* @example
* var data = url.parseURL('http://www.baidu.com/s/cd?data=1');
* console.log(data);
* //输出
* {
"source": "http://www.baidu.com/s/cd?data=1",
protocol": "http",
"host": "www.baidu.com",
"port": "",
query": "?data=1",
"params": {
"data": "1"
},
"file": "cd",
"hash": "",
"path": "/s/cd",
"relative": "/s/cd?data=1",
"segments": [
"s",
"cd"
]
}
*/
function parseURL(url) {
let a = document.createElement('a');
a.href = url;
return {
source: url,
protocol: a.protocol.replace(':', ''),
host: a.hostname,
port: a.port,
query: a.search,
params: (function () {
let ret = {},
// eslint-disable-next-line
seg = a.search.replace(/^\?/, '').split('&'),
len = seg.length, i = 0, s; //len = 2
for (; i < len; i++) {
if (!seg[i]) {
continue;
}
s = seg[i].split('=');
ret[s[0]] = s[1];
}
return ret;
})(),
file: (a.pathname.match(/\/([^\/?#]+)$/i) || [, ''])[1],// eslint-disable-line
hash: a.hash.replace('#', ''),// eslint-disable-line
path: a.pathname.replace(/^([^\/])/, '/$1'),// eslint-disable-line
relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [, ''])[1],// eslint-disable-line
segments: a.pathname.replace(/^\//, '').split('/')// eslint-disable-line
};
}
export {
getUrlParam,
getUrlParamsStr,
parseJson2Str,
parseStr2Json,
parseURL
};