美文网首页
从URL中获取参数、参数值

从URL中获取参数、参数值

作者: Mr老朝 | 来源:发表于2021-06-16 16:09 被阅读0次

从字符串中解析参数

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');

相关文章

网友评论

      本文标题:从URL中获取参数、参数值

      本文链接:https://www.haomeiwen.com/subject/lhxfyltx.html