Layui如何获取tree组件中所有勾选节点的ID集合

浅墨君_5406

浅墨君_5406

2026-07-05

388人浏览

原创

Layui tree组件勾选状态不自动同步到数据源,需调用tree.getChecked('id')获取已勾选节点数组,再map提取id;注意配置idName及确保节点含id字段,监听应使用click回调而非form.on。

tree 组件勾选状态不是实时同步到数据源的

layui 的 tree 组件默认不会自动把勾选状态写回原始数据,data 传进去什么样,它内部就按那样渲染,勾选只是 ui 层状态。所以不能直接遍历原始数据找 checked: true —— 那些字段压根没被更新。

正确做法是调用 tree.getChecked(),这是 Layui 提供的专用方法,返回当前所有已勾选节点的完整数据对象数组(含 id、title 等字段)。

  • 必须确保 tree 已完成渲染且绑定了 id 字段(Layui 依赖 id 做节点标识)
  • 如果原始数据里用的是 value 或 key 而非 id,需在初始化时通过 idName 参数显式指定:idName: 'value'
  • getChecked() 返回的是深拷贝对象,修改它不影响树组件本身

如何提取所有勾选节点的 ID 数组

拿到 getChecked() 返回的结果后,用 map() 提取 id 即可。注意:如果节点数据结构不统一(比如部分节点没 id),得加判断。

const checkedNodes = layui.tree.getChecked('treeDemo'); // 'treeDemo' 是 render 时传的 elem id
const checkedIds = checkedNodes.map(node => node.id);

更稳妥的写法(过滤掉缺失 id 的节点):

深蓝色网站后台管理系统layui框架模板-AdminPro
深蓝色网站后台管理系统layui框架模板-AdminPro

一款深蓝色网站后台管理系统layui框架模板

下载
const checkedIds = checkedNodes
  .filter(node => node.id !== undefined && node.id !== null)
  .map(node => node.id);
  • 不要用 forEach + push,没必要多声明变量
  • 如果后端要求字符串 ID(如后端接口只认字符串),统一转成字符串:.map(node => String(node.id))
  • 若树支持半选(showCheckbox: true 且有子节点部分勾选),getChecked() 只返回完全勾选的节点,不包括半选节点

监听勾选变化并实时获取 ID 列表

如果需要在用户每次勾选/取消时立刻响应,得在 click 回调里手动触发 getChecked(),因为 Layui tree 没提供专门的 check 事件。

layui.tree.render({
  elem: '#treeDemo',
  data: treeData,
  click: function(obj){
    const ids = layui.tree.getChecked('treeDemo').map(n => n.id);
    console.log('当前勾选ID:', ids);
  }
});
  • obj 参数里的 obj.checked 表示**当前点击节点**的新勾选状态,不是全量状态
  • 别在 click 里只读 obj.data.id —— 这只能拿到一个节点,漏掉其他已勾选的
  • 如果树节点很多(上千级),频繁调用 getChecked() 几乎无性能压力,它是 O(n) 遍历内部缓存,不是 DOM 查询

常见错误:用 layui.form.on('checkbox') 监听失效

有人试图用 Layui 表单模块的 checkbox 事件监听 tree 里的复选框,这行不通。tree 的复选框是动态生成的 DOM,且未被 form.render() 管理,form.on('checkbox') 完全捕获不到。

  • 根本原因是 tree 组件自建 checkbox 结构,绕过了 form 模块的事件绑定机制
  • 强行给 tree 内部 checkbox 绑原生 click 事件也容易出错(事件冒泡、重复绑定、节点销毁后残留监听)
  • 唯一可靠方式就是走 tree.render 的 click 回调 + getChecked()
实际用的时候,最常漏掉的是 idName 配置和 getChecked() 的参数(必须传 render 时指定的容器 ID)。这两个点卡住,返回的就是空数组,但控制台又没报错,容易以为是 API 问题。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

layui

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2023.08.07

2035

5

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.23

2942

1

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

2023.10.13

996

3

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2025.09.10

3319

7

ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

2600

4

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

340

5

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.15

2433

5

ajax网站有哪些
ajax网站有哪些

使用ajax的网站有谷歌、维基百科、脸书、纽约时报、亚马逊、stackoverflow、twitter、hacker news、shopify和basecamp等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.09.24

1141

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ThinkPHP配置开发与CMS后台实战
ThinkPHP配置开发与CMS后台实战

共87课时 | 12.7万人学习

第二十三期_综合实战
第二十三期_综合实战

共89课时 | 10.9万人学习

Layui 快速入门精讲
Layui 快速入门精讲

共5课时 | 1.6万人学习