/** * 构造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; } }