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

Bootstrap Collapse本地存储异常:关闭项时误删多个条目求助

修复Bootstrap Collapse状态LocalStorage存储的删除异常问题

你的代码出现删除多个条目的问题,核心原因是在处理hide.bs.collapse事件时错误使用了数组的splice方法:splice会返回被删除的元素,而你把这个返回值当成剩余元素拼接后存储,导致结果完全错误。另外原代码还存在重复添加同一ID、边界处理不严谨的问题,以下是修复后的完整代码:

$(".content-accordion-content").each(function(index) {
    const collapseId = $(this).attr("id");
    console.log(index, collapseId);

    // 页面加载时恢复之前的展开状态
    const savedExpanded = localStorage.getItem("ExpandedCollapses");
    if (savedExpanded) {
        const expandedIds = savedExpanded.split("|");
        if (expandedIds.includes(collapseId)) {
            $(this).collapse("show");
        }
    }

    $(this).on("show.bs.collapse", function() {
        let expandedIds = [];
        const saved = localStorage.getItem("ExpandedCollapses");
        if (saved) {
            expandedIds = saved.split("|");
        }
        // 避免重复添加同一ID
        if (!expandedIds.includes(collapseId)) {
            expandedIds.push(collapseId);
            localStorage.setItem("ExpandedCollapses", expandedIds.join("|"));
        }
    });

    $(this).on("hide.bs.collapse", function() {
        const saved = localStorage.getItem("ExpandedCollapses");
        if (!saved) return;

        const expandedIds = saved.split("|");
        const idIndex = expandedIds.indexOf(collapseId);
        // 找到对应ID再执行删除
        if (idIndex !== -1) {
            expandedIds.splice(idIndex, 1);
            localStorage.setItem("ExpandedCollapses", expandedIds.join("|"));
        }
        console.log(expandedIds.join("|"), collapseId);
    });
});

关键修改说明:

  • 统一用数组管理ID:无论是读取还是存储,先把localStorage的字符串转成数组,操作完成后再转回字符串,避免字符串拼接的边界问题
  • 修复splice的使用错误:删除元素后,将修改后的原数组(而非splice返回的被删除元素)拼接存储
  • 增加重复ID判断:展开时先检查ID是否已存在,避免重复添加
  • 添加页面加载恢复逻辑:原代码只处理了存储,补充了页面刷新后恢复之前展开状态的功能
  • 简化边界条件判断:用更简洁的方式处理localStorage为空的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:48:58