js-URL参数的获取

作者: 墨_梵 | 来源:发表于2018-11-05 13:57 被阅读2次

    1、获取单个参数:

    function getParam(name, url) {
        if(typeof name !== 'string') return false;
        if (!url) url = window.location.href;
        // 当遇到name[xx]时,对方括号做一下转义为 name\[xxx\],因为下面还需要使用name做正则
        name = name.replace(/[\[\]]/g, '\\$&');
        var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)');
        var results = regex.exec(url);
        if (!results) return null;
        if (!results[2]) return '';
        return decodeURIComponent(results[2].replace(/\+/g, " "));
    }
    
    getParam('query','https://juejin.im/search?query=hello&time=2017-11-12')
    
    //输出:hello
    

    2、获取多个参数:

    function getParams(names, url) {
        if(typeof name !== 'string') return false;
        var names = names.split(' ');
        var result = {};
        var i = 0,
            len = names.length;
        if (names.length === 0) return false;
        for (; i < len; i++) {
            result[names[i]] = getParam(names[i], url);
        }
        return result;
    }
    getParams('query time','https://juejin.im/search?query=hello&time=2017-11-12')
    
    //输出:{query: "hello", time: "2017-11-12"}
    

    3、设置单个参数:

    function setParam(name, val, url) {
        if(typeof name !== 'string') return false;
        if (!url) url = window.location.href;
        var _name = name.replace(/[\[\]]/g, '\\$&');
        var value = name + '=' + encodeURIComponent(val);
        var regex = new RegExp(_name + '=[^&]*');
        var urlArr = url.split('#');
        var result = '';
    
        if(regex.exec(url)){
            result =  url.replace(regex, value);
        }else{
            result = urlArr[0]+'&'+value+ (urlArr[1] || '');
        }
    
        return result
    }
    setParam('query','world','https://juejin.im/search?query=hello&time=2017-11-12')
    
    // output: 
    // "https://juejin.im/search?query=world&time=2017-11-12"
    

    4、设置多个参数:

    function setParams(obj, url) {
        var result = url || '';
        if (Object.prototype.toString.call(obj) !== '[object Object]') return false;
        for (var name in obj) {
            result = setParam(name, obj[name], result);
        }
        return result;
    }
    setParams({a:111,b:222,query:'world'},'https://juejin.im/search?query=hello&time=2017-11-12')
    
    // output: 
    // "https://juejin.im/search?query=world&time=2017-11-12&a=111&b=222"
    

    相关文章

      网友评论

        本文标题:js-URL参数的获取

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