从字符串中解析参数
function parseQuery(url) {
url = url || '';
const queryObj = {};
const reg = /[?&]([^=&#]+)=([^&#]*)/g;
const queryArr = url.match(reg) || [];
for (const i in queryArr) {
if (Object.hasOwnProperty.call(queryArr, i)) {
const query = queryArr[i].split('=');
const key = query[0].substr(1);
const value = decodeURIComponent(query[1]);
queryObj[key] ? queryObj[key] = [].concat(queryObj[key], value) : queryObj[key] = value;
}
}
return queryObj;
}
获取URL的参数
parseQuery(window.location.href);
处理url的参数,生成新的url
function dealUrl() {
const search = location.search || '';
const hash = location.hash || '';
const hashPath = (hash.split('?') || [])[0] || '';
let hashSearch = (hash.split('?') || [])[1] || ''
hashSearch && (hashSearch = '?' + hashSearch);
const searchObject = parseQuery(search);
delete searchObject.userId;
const hashSearchObject = parseQuery(hashSearch);
delete hashSearchObject.token;
let newSearch = Object.entries(searchObject).map(item => item.join('=')).join('&');
newSearch && (newSearch = '?' + newSearch);
let newHashSearch = Object.entries(hashSearchObject).map(item => item.join('=')).join('&');
newHashSearch && (newHashSearch = '?' + newHashSearch);
const newHash = hashPath + newHashSearch;
const newUrl = `${window.location.origin}${window.location.pathname}${newSearch}${newHash}`;
return newUrl ;
}
dealUrl();
function addUrlPara(url, key, value) {
url = url || '';
let hash = (url.split('#') || [])[1] || '';
hash && (hash = '#' + hash);
const path = (url.split('#') || [])[0] || '';
const host = (path.split('?') || [])[0] || '';
let search = (path.split('?') || [])[1] || '';
search && (search = '?' + search);
const hashPath = (hash.split('?') || [])[0] || '';
let hashSearch = (hash.split('?') || [])[1] || ''
hashSearch && (hashSearch = '?' + hashSearch);
const searchObject = parseQuery(search);
key && (searchObject[key] = value);
const hashSearchObject = parseQuery(hashSearch);
let newSearch = Object.entries(searchObject).map(item => item.join('=')).join('&');
newSearch && (newSearch = '?' + newSearch);
let newHashSearch = Object.entries(hashSearchObject).map(item => item.join('=')).join('&');
newHashSearch && (newHashSearch = '?' + newHashSearch);
const newHash = hashPath + newHashSearch;
url = `${host}${newSearch}${newHash}`;
return url;
}
addUrlPara(location.href, 'key', 'value');
网友评论