📌  相关文章
📜  javascript 在不重新加载的情况下更改获取参数 - Javascript (1)

📅  最后修改于: 2023-12-03 15:16:10.819000             🧑  作者: Mango

JavaScript 在不重新加载的情况下更改获取参数

在前端开发中,我们常常需要获取 URL 的参数值,然后根据不同的参数值来执行不同的操作。但是有时候,我们希望在不重新加载页面的情况下更改 URL 的参数值,这时候就需要使用 JavaScript 来实现了。

获取 URL 参数

在 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 参数

既然可以获取 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 中,在不重新加载的情况下更改获取参数的方法。这种方法简单易用,可以很方便地实现对参数值的修改。