You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用localStorage实现页面重载后保留toggle切换的offline类状态

问题根因

你现在的代码只在localStorage里存了全局唯一的status值,任意按钮点击都会覆盖这个值,页面重载后判断只要这个值是offline就给所有按钮添加offline类,自然会出现全量更新的问题。你需要为每个按钮单独存储状态。

解决方案

我们可以给每个按钮分配唯一标识,将所有按钮的状态以对象形式存在localStorage里,实现每个按钮状态独立存储读取。无需修改HTML和CSS,仅替换JS代码即可:

const statusBtn = document.getElementsByClassName("statusBtn");
// 初始化状态存储,无历史数据则默认是空对象
const btnStatus = JSON.parse(localStorage.getItem("btnStatus") || "{}");

// 遍历按钮同时完成事件绑定和状态初始化
for (let i = 0; i < statusBtn.length; i++) {
  // 给按钮添加唯一索引标识
  statusBtn[i].dataset.index = i;
  // 页面加载时读取历史状态更新按钮样式
  if (btnStatus[i] === "offline") {
    statusBtn[i].classList.add("offline");
    statusBtn[i].innerText = "Offline";
  } else {
    statusBtn[i].classList.remove("offline");
    statusBtn[i].innerText = "Online";
  }
  // 绑定点击事件
  statusBtn[i].addEventListener("click", function() {
    const index = this.dataset.index;
    this.classList.toggle("offline");
    if (this.classList.contains("offline")) {
      this.innerText = "Offline";
      btnStatus[index] = "offline";
    } else {
      this.innerText = "Online";
      btnStatus[index] = "online";
    }
    // 最新状态序列化后存入localStorage
    localStorage.setItem("btnStatus", JSON.stringify(btnStatus));
  });
}

逻辑说明

  • 用btnStatus对象存储所有按钮的状态,key为按钮的索引,value为对应按钮的在线/离线状态
  • 每次点击仅更新当前按钮对应的状态值,再全量序列化存入localStorage
  • 页面加载时按索引读取每个按钮的独立状态,单独更新样式和文本,不会影响其他按钮的状态

内容的提问来源于stack exchange,提问作者Sands45

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:39:03