使用JS设置或更新URL参数的几种方式
第一种,使用正则表达式匹配:
//参数值不为空时,存在参数则更新,否则不操作
function updateQueryStringParameter(uri, key, value) {
if(!value) {
return uri;
}
var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
var separator = uri.indexOf('?') !== -1 ? "&" : "?";
if (uri.match(re)) {
return uri.replace(re, '$1' + key + "=" + value + '$2');
}
else {
return uri + separator + key + "=" + value;
}
}
var url = 'http://www.example.html';
url = updateQueryStringParameter(url, 'a', '1');
console.log(url);
url = updateQueryStringParameter(url, 'b', '2');
console.log(url);
url = updateQueryStringParameter(url, 'a', '');
console.log(url);
输出:
http://www.example.html?a=1
http://www.example.html?a=1&b=2
http://www.example.html?a=1&b=2
第二种方式,使用URL对象构造url
var url2 = new URL("http://foo.bar/?x=1&y=2");
console.log(url2.href);
url2.searchParams.append('x', 42);
console.log(url2.href);
url2.searchParams.set('x', 42);
console.log(url2.href);
输出:
http://www.example.html?x=1&y=2
http://www.example.html?x=1&y=2&x=42
http://www.example.html?x=42&y=2
缺点是有些浏览器版本不支持