最近突发奇想,用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)
代码测试完成