必须用 document.queryselectorall('tbody input[type="checkbox"]:checked') 获取真实选中项,精准限定数据行内,自动过滤全选框、disabled 项及伪复选框,并确保 checkbox 有唯一 value;批量删除应聚合 id 单次提交,精准移除 dom 元素并同步更新状态。

怎么用 querySelectorAll(':checked') 拿到真实选中项
别信框架层数据,也别遍历所有 <input type="checkbox"> 然后手动判断 checked 属性——DOM 和 JS 数据不同步时,这会漏项或误判。
必须用原生 DOM 查询实时状态:
-
document.querySelectorAll('tbody input[type="checkbox"]:checked')—— 精准限定在数据行内,自动过滤掉全选框、disabled 项和 label 里未触发 click 的伪复选框 - 确保每个 checkbox 有唯一
value(比如服务端返回的id),不要用 index 或临时生成值 - 如果 checkbox 套在
<label></label>里,检查是否绑了for或事件代理;否则点击 label 文本不会更新原生checked
为什么不能循环发 fetch 请求删多条
用户点一次“批量删除”,前端发 10 个请求,后端可能只处理完前 3 个就崩了,剩下 7 条还在库里——这不是删不干净,是并发失控。
正确做法是聚合 ID 后单次提交:
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
- 收集 ID 数组:
const ids = Array.from(checkedInputs).map(el => el.value) - 统一发 POST:
fetch('/api/items/delete', { method: 'POST', body: JSON.stringify({ ids }) }) - 后端接口必须支持数组入参;不支持?宁可加一层代理接口,也别在前端写
for...of+fetch - 注意:
Content-Type: application/json要显式设置,否则某些后端收不到 body
删完 DOM 怎么避免重刷整张表
innerHTML = '' 看着快,但会清空焦点、滚动位置、编辑态 input、动态绑定的事件监听器——用户正在改某行数据,你一删,光标没了,内容丢了,按钮点不动了。
精准移除才是稳定做法:
- 每条待删记录必须有稳定标识,优先用服务端返回的
data-id:<tr data-id="123"><td>...</td></tr> - 逐行定位并移除:
ids.forEach(id => document.querySelector(`tr[data-id="${id}"]`)?.remove()) - 删完立刻清空勾选状态:
checkedInputs.forEach(el => el.checked = false),否则再点“批量删除”会发空数组 - 用了分页或虚拟滚动?记得同步更新总条数、当前页剩余数,不然下一页加载可能为空还显示“共 20 条”
全选框和单个 checkbox 状态怎么保持一致
全选框只是个开关,不是状态源。它被点一下,下面所有 checkbox 要同步;反过来,下面任意一个被手动取消,全选框就得变未选中——这个逻辑漏掉,用户就会觉得“点了全选,怎么还有没勾上的?”
关键不在“怎么设”,而在“什么时候设”:
- 全选框 change 事件里,批量设置其他 checkbox 的
checked属性,并同步更新其indeterminate(半选)状态 - 每个普通 checkbox 的 change 事件里,统计已选数量:
const checkedCount = document.querySelectorAll('tbody input[type="checkbox"]:checked').length - 然后对比总数:
if (checkedCount === total) selectAll.checked = true;else if (checkedCount === 0) selectAll.checked = false;否则设selectAll.indeterminate = true - 别用
click代替change——键盘空格切换也会触发change,但不会触发click
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










