处理url上的参数,且页面不会发生刷新行为

// index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script src="./index.js"></script>
</body>
</html>
// index.js
(() => {
  if (!location.search) {
    location.href = location.href + `?aaa=123&bbb=456&ccc=789`;
  }

  // 获取 url 上的参数
  function getUrlParams(key) {
    const search = new URLSearchParams(window.location.search);
    return search.get(key);
  }

  console.log("url 上参数 aaa 的值是:", getUrlParams("aaa"));
  console.log("url 上参数 bbb 的值是:", getUrlParams("bbb"));
  console.log("url 上参数 ccc 的值是:", getUrlParams("ccc"));

  // 删除 url 上的参数
  function removeUrlParams(key) {
    let href = location.href;
    const e = eval(`/&?${key}=[^&#]*/g`);
    href = href.replace(e, "");
    /**
     *
     * state object —— 状态对象是一个由 replaceState()方法创建的、与历史纪录相关的javascript对象。当用户定向到一个新的状态时,会触发popstate事件。事件的state属性包含了历史纪录的state对象。如果不需要这个对象,此处可以填null
     * title —— 新页面的标题,但是所有浏览器目前都忽略这个值,因此这里可以填null
     * url —— 这个参数提供了新历史纪录的地址。新URL必须和当前URL在同一个域,否则,replaceState()将丢出异常。这个参数可选,如果它没有被特别标注,会被设置为文档的当前URL
     */
    history.replaceState("", "", href); // replaceState 方法不会触发页面刷新,只是导致history对象发生变化,地址栏会有反应
  }

  // 移除 bbb 的值
  removeUrlParams("bbb");
  console.log("移除 bbb 后, url 上参数 bbb 的值是:", getUrlParams("bbb"));
})();

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值