📅  最后修改于: 2023-12-03 15:16:10.819000             🧑  作者: Mango
在前端开发中,我们常常需要获取 URL 的参数值,然后根据不同的参数值来执行不同的操作。但是有时候,我们希望在不重新加载页面的情况下更改 URL 的参数值,这时候就需要使用 JavaScript 来实现了。
在 JavaScript 中,可以通过 location.search
来获取 URL 的参数部分。例如,如果 URL 是 http://www.example.com/index.html?name=foo&age=20
,那么 location.search
就是 ?name=foo&age=20
。为了方便起见,我们可以使用下面的函数来获取 URL 中某个参数的值:
function getParameterByName(name) {
name = name.replace(/[\[\]]/g, '\\$&');
var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)');
var results = regex.exec(location.search);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, ' '));
}
比如我们要获取上述的 URL 中的 name
参数的值,可以使用下面的代码:
var name = getParameterByName('name');
console.log(name); // 输出:foo
既然可以获取 URL 的参数值,那么也就可以修改参数值了。下面是一种简单的方法,即使用 history.replaceState
来修改 URL 中的参数部分:
function updateQueryStringParameter(uri, key, value) {
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 = updateQueryStringParameter(window.location.href, 'name', 'bar');
history.replaceState(null, null, url);
上面的代码中,updateQueryStringParameter
函数用来替换或者添加 URL 中的参数值,如果 URL 中已经存在该参数,则直接替换参数值;否则就在 URL 中添加该参数。最后,使用 history.replaceState
来更新 URL。
以上就是在 JavaScript 中,在不重新加载的情况下更改获取参数的方法。这种方法简单易用,可以很方便地实现对参数值的修改。