使用原生 Web API 或 vanilla javascript 比使用 jQuery 更容易实现这一点。就 jQuery 而言,没有提供任何特定的函数来处理查询字符串。
新的 URLSearchParams 对象提供了一些方法来更轻松地处理 URL 查询字符串。例如,在您的情况下,您需要执行以下操作:
function updateQueryString(queryString, dateStart) {
var queryString = new URLSearchParams(queryString);
queryString.has('dateStart')
? queryString.set('dateStart', dateStart)
: queryString.append('dateStart', dateStart);
return queryString.toString();
}
对于这个解决方案,你需要一个 polyfill
遗憾的是,大多数网络浏览器尚未实现此功能,您需要“polyfill” URLSearchParams 对象才能使此解决方案正常工作。您必须将此行添加到 html 中的 <head> 部分:
<script src="https://cdn.rawgit.com/inexorabletash/polyfill/v0.1.14/polyfill.min.js"></script>
您可以找到有关URLSearchParams in the Mozilla Developers Network Documentation、WHATWG specification for the URL Standard 或specification by the W3C 的更多信息
没有 polyfill 的解决方案
如果您不喜欢使用 edge 功能,您仍然可以在没有任何额外 polyfill 的情况下使用。它看起来像这样:
function updateQueryString(queryString, dateStart) {
var qsObject = {};
queryString
.substring(1) // ignore '?'
.split('&').forEach(function (param) {
param = param.split('=');
qsObject[param[0]] = param[1];
});
qsObject['dateStart'] = dateStart;
return '&' + Object.keys(qsObject)
.map(function (key) {
return key + '=' + qsObject[key];
})
.join('?');
}
调用你喜欢的任何版本的updateQueryString函数:
updateQueryString(windonw.location.search, dateStart)