代码如下
/**
* changeURLStatic 修改地址栏 URL参数 不跳转
* @param name
* @param value
*/
function changeURLStatic(name, value) {
let url = changeURLParam(location.href, name, value); // 修改 URL 参数
history.replaceState(null, null, url); // 替换地址栏
}
/**
* changeURLParam 修改 URL 参数
* @param url
* @param name
* @param value
* @returns {string}
*/
function changeURLParam(url, name, value) {
if (typeof value === 'string') {
value = value.toString().replace(/(^\s*)|(\s*$)/, ""); // 移除首尾空格
}
let url2;
if (!value) { // remove
let reg = eval('/(([\?|&])' + name + '=[^&]*)(&)?/i');
let res = url.match(reg);
if (res) {
if (res[2] && res[2] === '?') { // before has ?
if (res[3]) { // after has &
url2 = url.replace(reg, '?');
} else {
url2 = url.replace(reg, '');
}
} else {
url2 = url.replace(reg, '$3');
}
}
} else {
let reg = eval('/([\?|&]' + name + '=)[^&]*/i');
if (url.match(reg)) { // edit
url2 = url.replace(reg, '$1' + value);
} else { // add
let reg = /([?](\w+=?)?)[^&]*/i;
let res = url.match(reg);
url2 = url;
if (res) {
if (res[0] !== '?') {
url2 += '&';
}
} else {
url2 += '?';
}
url2 += name + '=' + value;
}
}
return url2;
}
应用示例:
参数存在示例:
//当前页面地址
index.php?m=p&a=index&classify_id=225&search=i
//执行修改
changeURLStatic('search', '99999');
//修改后页面地址
index.php?m=p&a=index&classify_id=225&search=99999
参数不存在示例:
//当前页面地址
index.php
//执行修改
changeURLStatic('m', 'Index');
//修改后页面地址
index.php?m=Index
//执行修改
changeURLStatic('search', '99999');
//修改后页面地址
index.php?m=Index&search=99999