使用JavaScript获取地址栏里的参数

方文锋  2021-06-30 15:10:36  1440  首页学习JavaScript

最近突发奇想,用JavaScript封装一个获取地址栏的get参数,代码如下:

 /**
     * 获取地址参数
     * @param {string} name
     * @param {string} option 选项值有[get,param]
     * @param {number} num option值为param时才有用,从第几项开始截取,最小值是0
     * @returns {*}
     */
    function param(name, option, num) {
        (option) || (option = "get");
        (num) || (num = 0);
        if (option === "get") {
            if (!location.search) {
                location.search = location.href.match(/[?].*/i)[0];
            }
            var arr1 = decodeURIComponent(location.search.replace(/^\?/i, "")).split(/&/i);
            var arr2 = {};
            for (var i = 0, len = arr1.length; i < len; i++) {
                var k_v = arr1[i].split("=");
                arr2[k_v[0]] = arr1[i].replace(new RegExp("^" + k_v[0].replace(/([?.{}*\/\[\]+,\\()<>])/ig, "\\$1") + "=", "i"), "");
            }
            return name ? arr2[name] : arr2;
        }
        if (option === "param" && typeof num === "number" && num >= 0) {
            var trim = function (str, preg) {
                if (preg) {
                    preg = new RegExp("(^" + preg + "*|" + preg + "*$)", "ig");
                }
                (preg) || (preg = /(^[\s\t\r\n]*|[\s\t\r\n]*$)/ig);
                return str.replace(preg, "");
            };
            var pathname = trim(decodeURIComponent(location.pathname), "\/");
            var arr1 = pathname.split(/\//);
            if (/([a-z_A-Z_0-9\-]+\.[a-zA-Z0-9]+)/i.test(arr1[0])) {
                arr1.shift();
            }
            var new_arr1 = [];
            for (var i = 0, len = arr1.length; i < len; i++) {
                if (i >= num) {
                    new_arr1.push(arr1[i]);
                }
            }
            var arr2 = {};
            for (var i = 0, len = new_arr1.length; i < len; i++) {
                if (i % 2 === 0) {
                    arr2[new_arr1[i]] = typeof new_arr1[i + 1] === "undefined" ? null : new_arr1[i + 1];
                }
            }
            return name ? arr2[name] : arr2;
        }
        return false;
    } 



如图:

地址栏

获取get参数

获取虚拟路径的(location.pathname)


代码测试完成