关于JavaScript中重置URL参数的说明

/**
* 构造URL参数信息
* nameValues:要构造的URL参数信息,由键值对构成,如name=value
* includeEmpty:是否包括空值参数
* return:返回构造后URL参数信息
*/
function buildUrlParams(nameValues, includeEmpty) {
    // 定义新的URL参数字典
    var newParams = {};
    // 构造要设置的URL参数信息
    var nameValue = nameValues instanceof Array ? nameValues.join("&") : nameValues;
    // 拆分URL参数信息
    var oldParams = nameValue.split("&");
    // 遍历每个URL参数
    for (var i = 0, length = oldParams.length; i < length; i++) {
        // 获取URL参数的键值对
        var items = oldParams[i].split("=");
        // 判断URL参数的键值对是否有效
        if (items.length) {
            // 获取参数名
            var name = items[0];
            // 判断参数名是否有效
            if (name) {
                // 获取参数值
                var value = null;
                if (items.length > 1) {
                    value = items[1]
                }
                // 判断URL参数的键值对是否有效
                if (includeEmpty || value) {
                    // 获取已构造的参数值
                    var values = newParams[name];
                    if (!values) {
                        // 没有构造过参数则添加新的参数信息
                        values = newParams[name] = [];
                    }
                    // 添加新的参数值
                    if (value) {
                        // 如参数未URL编码则对其进行编码
                        //value = decodeURIComponent(value) == value ? encodeURIComponent(value) : value;
                        values.push(value);
                    }
                }
            }
        }
    }
    // 返回构造后URL参数信息
    return newParams;
}

/**
* 设置URL参数
* url:要设置参数的URL
* nameValues:要设置的参数信息,由键值对构成,如name=value
* return:返回设置参数后的URL
*/
function setUrlParams(url, nameValues) {
    // 构造要设置的URL参数信息
    var newParams = buildUrlParams(nameValues, true);
    // 获取URL地址中参数开始索引
    var index = url.indexOf("?");
    // 判断URL地址中是否有参数
    if (index >= 0) {
        // 构造原始的URL参数信息
        var oldParams = buildUrlParams(url.substring(index + "?".length));
        // 获取不带参数的URL地址
        url = url.substring(0, index);
        // 遍历要设置的URL参数信息
        for (var name in newParams) {
            // 将要设置的URL参数信息覆盖添加到原始参数信息中
            oldParams[name] = newParams[name];
        }
        // 重新设置URL参数信息
        newParams = oldParams;
    }
    // 构造URL参数键值对
    var params = [];
    for (var name in newParams) {
        var values = newParams[name];
        if (values.length) {
            params.push(name + "=" + values.join(","));
        }
    }
    // 判断是否有参数
    if (params.length) {
        // 返回构造后的URL地址
        return url + "?" + params.join("&");
    }
    else {
        // 没有参数则返回不带参数的URL地址
        return url;
    }
}

发布者

陆 煜涛

http://luyutao.com/

发表评论

电子邮件地址不会被公开。 必填项已用*标注