当前位置: 首页
前端开发
jQuery表格间选中行精准移动与交换方法

jQuery表格间选中行精准移动与交换方法

热心网友 时间:2026-07-19
转载

基于复选框选择,利用jQuery将HTML表格中已勾选的行安全移动到另一张表格,避免整表移除导致的DOM结构丢失和事件失效。该技术适用于权限分配、字段映射等双列表选择器场景,用户勾选后通过点击按钮实现精准移动。

本文详细讲解如何利用复选框选中表格行,将 HTML 表格中已勾选的行(tr)安全、高效地迁移到另一张表格中,避免整表移除导致的 DOM 结构丢失与事件失效问题。

在实际项目开发中,双列表选择器是一种极为常见的交互组件,广泛应用于权限分配、字段映射、角色绑定等场景。用户只需勾选左侧或右侧表格中的条目,点击“>”、“>>”、“<”、“<<”按钮,即可实现单向或批量移动。如果直接使用 $("#tblgroup1").remove(),则容易踩坑:整个表格会被销毁,不仅未选中的行全部消失,绑定的事件、表单状态和 DOM 引用也会一并清空,造成不可逆的数据丢失。

正确的做法是精准定位并迁移选中的行,而非整表移除。jQuery 的链式操作在此场景下非常高效:先找到带勾选复选框的 ,再将其从原容器“剪切”下来,追加到目标表格中。该操作本质上是 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);  
  }  
}

关键优势说明:

  • 零数据丢失:仅移动 节点,未选中的行稳稳留在原地;
  • 状态完整保留:复选框的 checked 状态、自定义 data 属性、内联事件,一个都不少;
  • 性能友好:无需 .html() 序列化再重新解析,既避免 XSS 风险,也防止格式错乱;
  • 语义清晰:closest('tr') 向上精准查找最近的行容器,即使表格内嵌套了其他结构也能正确匹配。

⚠️ 注意事项:

  • 所有 的 id 属性在页面中必须唯一。示例代码中多个 id="vehicle1" 其实违反 HTML 规范,建议改为 class="item-checkbox" 或动态生成唯一 ID;
  • 如果希望移动后自动取消勾选,可在 append() 之后追加一行 $rows.find('input[type="checkbox"]').prop('checked', false)
  • 若表格带有 ,务必确保只操作 内的 ,避免误移标题行。可限定选择器为 #tblgroup1 tbody input:checked
  • 建议给按钮加上 disabled 状态反馈——例如没有选中项时禁用按钮,可显著提升用户体验。

采用这套方案,可以构建出健壮、可维护的双向列表交互组件,既兼顾功能完整,又保证 DOM 操作的安全性,值得在项目中直接复用。

来源:https://www.php.cn/faq/2812555.html

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
DOM中文本元素层级路径的精准定位方法

DOM中文本元素层级路径的精准定位方法

通过向上遍历至首个带id的祖先节点,同时记录每层子索引,构建唯一可复现的层级路径,可精确定位任意右键点击的文本元素在页面中的结构位置,该方案将DOM定位转化为树路径问题,性能稳定且适用于复杂嵌套结构。

时间:2026-07-20 06:56
Tailwind CSS响应式断点原理与文本尺寸类正确使用顺序

Tailwind CSS响应式断点原理与文本尺寸类正确使用顺序

TailwindCSS的响应式前缀基于min-width媒体查询,采用移动优先策略。无前缀类默认所有尺寸生效,带前缀类在达到对应断点后增强覆盖。正确写法应从小到大依次排列,避免大屏变小,确保移动端优先,逐步适配更大屏幕,断点尺寸依次递增。

时间:2026-07-20 06:55
Nuxt 3/Vue 3 v-for列表删除后UI状态错乱解决方案

Nuxt 3/Vue 3 v-for列表删除后UI状态错乱解决方案

在Nuxt3 Vue3中,v-for列表删除后UI状态错乱源于将数组索引作为key,导致DOM节点复用。正确做法是为每项数据赋予稳定唯一的id作为key,并确保key绑定在v-for所在元素上,避免使用索引,从而保证UI与数据同步。

时间:2026-07-20 06:55
独立控制每个可展开区域的展开折叠状态

独立控制每个可展开区域的展开折叠状态

在React中为多个同类型可展开区域实现独立开关控制,核心是将状态粒度从组件级下放到每个条目级,通过自定义Hook封装状态逻辑,使用唯一标识符而非数组索引管理展开状态,避免全局状态导致同步开闭,支持展开、收起和切换方法。

时间:2026-07-20 06:55
Ant Design自定义CSS主题编译耗时优化方案

Ant Design自定义CSS主题编译耗时优化方案

AntDesign自定义CSS主题编译慢的根源是Webpack每次完整解析整个index less。解决方法包括:配置less-loader缓存目录、modifyVars仅传需覆盖变量、避免动态@import路径、禁用cssinjs、主题变量通过构建时注入而非运行时计算,并同步更新alias less。

时间:2026-07-20 06:55
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 热门数据榜