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

localStorage渲染的可见DOM元素存在,QuerySelector查询却返回null如何解决

问题根本原因

你写的document.querySelectorAll('.editButt')是同步执行代码,会在脚本加载解析完成后立刻运行,而你渲染按钮的Load_Users函数是绑定在DOMContentLoaded事件上触发的——这个事件要等整个HTML文档解析完成、所有静态DOM节点加载完毕才会执行,所以你执行查询的时候,本地存储里的数据还没被渲染成DOM元素,自然查不到对应节点。

解决方案

方案1:将查询逻辑放到元素渲染完成后执行

把查询操作放到Load_Users函数的末尾,等所有行和按钮都插入到DOM之后再执行查询:

function Load_Users() {
    let Total_Users;
    if (localStorage.getItem('Total_Users') === null) {
        Total_Users = [];
    } else {
        Total_Users = JSON.parse(localStorage.getItem('Total_Users'));
    }
    Total_Users.forEach(item => {
        Show.addToUserList(item);
    })
    // 所有元素渲染完成后再查询
    let editElem = document.querySelectorAll('.editButt');
    console.log(editElem);
}

方案2:使用事件委托绑定按钮事件(更推荐)

如果你的最终目的是给编辑按钮绑定点击事件,不需要主动查询所有按钮,直接把事件绑定到已经存在的父元素#table-body上即可,后续动态新增的编辑按钮也能自动触发事件,不需要重复查询绑定:

document.querySelector('#table-body').addEventListener('click', e => {
    // 判断点击的是编辑按钮
    if (e.target.classList.contains('editButt')) {
        // 这里写编辑按钮的点击逻辑
        console.log('点击了编辑按钮', e.target);
    }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:18:04