地址栏连接参数修改

分享两个处理地址栏参数的常见方法

第一步:将参数连接转换为对象

 

// 将连接参数转为对象
function queryToJson(url) {
    let locse = url.split('?');
    let search = locse[1] ? locse[1] : locse[0];
    let pairs = search.split('&');
    let result = {};
    pairs.forEach(function (pair) {
        pair = pair.split('=');
        if (pair[0].length > 0) {
            let resultPair = '';
            try {
                resultPair = decodeURIComponent(pair[1]) || '';
            }
            catch (e) { }
            result[pair[0]] = resultPair;
        }
    });
    return result;
}

 

 

 

第二步:修改连接参数

// 修改连接参数
function changeURLArg(url, arg, argVal) {
    let pattern = arg + '=([^&]*)';
    let replaceText = arg + '=' + argVal;
    if (url.match(pattern)) {
        let tmp = '/(' + arg + '=)([^&]*)/gi';
        tmp = url.replace(eval(tmp), replaceText);
        return tmp;
    }
    else {
        if (url.match('[\?]')) {
            return url + '&' + replaceText;
        }
        else {
            return url + '?' + replaceText;
        }
    }
}

参数解释

url:就是连接的地址,可以是你手动传,也可以是localtion.href获取当前地址

arg:想要修改的参数名称

argVal:想要把被修改的参数转化成什么

 

使用示例

 

let URL = location.href;
        let bbb;
        //把URL变成对象
        let url = this.queryToJson(URL);
        // 把url的bbb前加aaa
        if (!!url.bbb) {
            //如果地址栏有bbb参数的时候
            if (url.bbb.indexOf('aaa') - 0 > -1) {
                //地址栏bbb参数的值前面有aaa的时候
                bbb = url.bbb;
            }
            else {
                //地址栏bbb参数的值不是aaa的时候,在前面加上aaa
                bbb = 'aaa' + url.bbb;
            }
        }
        else {
            //如果地址栏没有bbb参数的时候
            bbb = 'ccc';
        }
        //修改连接参数
        let useurl = this.changeURLArg(URL, 'bbb', bbb);

 

posted @ 2018-04-27 19:49  桐甘桐苦  阅读(1121)  评论(0编辑  收藏  举报