本文详细讲解如何利用复选框选中表格行,将 HTML 表格中已勾选的行(tr)安全、高效地迁移到另一张表格中,避免整表移除导致的 DOM 结构丢失与事件失效问题。
在实际项目开发中,双列表选择器是一种极为常见的交互组件,广泛应用于权限分配、字段映射、角色绑定等场景。用户只需勾选左侧或右侧表格中的条目,点击“>”、“>>”、“<”、“<<”按钮,即可实现单向或批量移动。如果直接使用 $("#tblgroup1").remove(),则容易踩坑:整个表格会被销毁,不仅未选中的行全部消失,绑定的事件、表单状态和 DOM 引用也会一并清空,造成不可逆的数据丢失。
正确的做法是精准定位并迁移选中的行,而非整表移除。jQuery 的链式操作在此场景下非常高效:先找到带勾选复选框的 下面是一段经过优化的核心逻辑,可适配全部四个按钮: ✅ 关键优势说明: ⚠️ 注意事项: 采用这套方案,可以构建出健壮、可维护的双向列表交互组件,既兼顾功能完整,又保证 DOM 操作的安全性,值得在项目中直接复用。 补充同频道和同主题内容,方便继续浏览更多相关内容。 继续查看同栏目最近更新的文章。 通过向上遍历至首个带id的祖先节点,同时记录每层子索引,构建唯一可复现的层级路径,可精确定位任意右键点击的文本元素在页面中的结构位置,该方案将DOM定位转化为树路径问题,性能稳定且适用于复杂嵌套结构。 TailwindCSS的响应式前缀基于min-width媒体查询,采用移动优先策略。无前缀类默认所有尺寸生效,带前缀类在达到对应断点后增强覆盖。正确写法应从小到大依次排列,避免大屏变小,确保移动端优先,逐步适配更大屏幕,断点尺寸依次递增。 在Nuxt3 Vue3中,v-for列表删除后UI状态错乱源于将数组索引作为key,导致DOM节点复用。正确做法是为每项数据赋予稳定唯一的id作为key,并确保key绑定在v-for所在元素上,避免使用索引,从而保证UI与数据同步。 在React中为多个同类型可展开区域实现独立开关控制,核心是将状态粒度从组件级下放到每个条目级,通过自定义Hook封装状态逻辑,使用唯一标识符而非数组索引管理展开状态,避免全局状态导致同步开闭,支持展开、收起和切换方法。 AntDesign自定义CSS主题编译慢的根源是Webpack每次完整解析整个index less。解决方法包括:配置less-loader缓存目录、modifyVars仅传需覆盖变量、避免动态@import路径、禁用cssinjs、主题变量通过构建时注入而非运行时计算,并同步更新alias less。,再将其从原容器“剪切”下来,追加到目标表格中。该操作本质上是 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;
相关推荐
同类最新
DOM中文本元素层级路径的精准定位方法
Tailwind CSS响应式断点原理与文本尺寸类正确使用顺序
Nuxt 3/Vue 3 v-for列表删除后UI状态错乱解决方案
独立控制每个可展开区域的展开折叠状态
Ant Design自定义CSS主题编译耗时优化方案
