基于复选框选择,利用jQuery将HTML表格中已勾选的行安全移动到另一张表格,避免整表移除导致的DOM结构丢失和事件失效。该技术适用于权限分配、字段映射等双列表选择器场景,用户勾选后通过点击按钮实现精准移动。
本文详细讲解如何基于复选框选择,将 HTML 表格中已勾选的行(tr)安全、高效地移动到另一张表格中,避免整表移除导致的 DOM 结构丢失和事件失效问题。
在实际开发中,双列表选择器是常见的交互组件,广泛应用于权限分配、字段映射、角色绑定等场景。用户勾选左侧或右侧表格中的条目,点击“>”、“>>”、“<”、“<<”按钮,即可实现条目的单向或批量移动。如果直接使用 $("#tblgroup1").remove(),会导致整个表格被销毁,未选中的行全部消失,绑定的事件、表单状态和 DOM 引用也会一并清空,造成不可逆的数据丢失。
正确的做法是精准定位并迁移选中的行,而不是整表移除。jQuery 的链式操作非常适合此场景:先找到带勾选复选框的 长期稳定更新的攒劲资源: >>>点此立即查看<<< 以下是一段经过优化的核心逻辑,适配全部四个按钮: 采用这套方案,可构建出健壮、可维护的双向列表交互组件,既兼顾功能完整性,又保证 DOM 操作的安全性,适合在项目中直接复用。 侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述,再将其从原容器“剪切”下来,追加到目标表格中。这一操作本质上是 DOM 节点的重挂载(reparenting),不会触发克隆或序列化,原始元素的所有属性、事件绑定和内部状态(如复选框的 checked 状态)均原封不动保留。 核心代码实现
function Swapselections(btn) {
const $btn = $(btn);
const text = $btn.text().trim();
// 统一获取当前选中行:查找包含 checked input 的 tr
const getCheckedRows = (tableId) => $(`${tableId} input:checked`).closest('tr');
if (text === '>>') {
// 将 tblgroup1 中所有选中行移至 tblgroup2
const $rows = getCheckedRows('#tblgroup1');
$('#tblgroup2').append($rows);
} else if (text === '>') {
// 将 tblgroup1 中首个选中行移至 tblgroup2(单条移动)
const $row = getCheckedRows('#tblgroup1').first();
if ($row.length) $('#tblgroup2').append($row);
} else if (text === '<') {
// 将 tblgroup2 中首个选中行移至 tblgroup1(单条移动)
const $row = getCheckedRows('#tblgroup2').first();
if ($row.length) $('#tblgroup1').append($row);
} else if (text === '<<') {
// 将 tblgroup2 中所有选中行移至 tblgroup1
const $rows = getCheckedRows('#tblgroup2');
$('#tblgroup1').append($rows);
}
}
关键优势说明
节点,未选中的行稳稳留在原地。
注意事项
的 id 属性在页面中必须唯一。示例代码中多个 id="vehicle1" 违反 HTML 规范,建议改为 class="item-checkbox" 或者动态生成唯一 ID。$rows.find('input[type="checkbox"]').prop('checked', false)。,务必确保只操作 内的 ,避免误移标题行。可限定选择器为 #tblgroup1 tbody input:checked。
相关攻略
更多
同类更新
更多
热游推荐
更多
下载
下载
下载
下载
下载