Layui如何实现点击按钮一键折叠或展开所有的树形表格节点

秋磊酱_6293

秋磊酱_6293

2026-05-18

334人浏览

原创

treeTable.expandAll() 和 treeTable.foldAll() 是 layui 官方 treetable 模块(2.8+)或 treetable-lay 插件(v2.1.0+)提供的批量展开/折叠 API,需确保模块正确引入、命名一致、实例已渲染且传入有效容器选择器。

treeTable.expandAll() 和 treeTable.foldAll() 是最直接的调用方式

layui 的官方 treetable 模块(非原生 tree 组件)提供了两个明确的 api:expandall 和 foldall,专用于批量控制所有节点展开/折叠状态。前提是必须使用的是 layui 官方 2.8+ 的 treetable,或社区广泛采用的 treetable-lay 插件(如 v2.1.0+),否则这些方法不存在。

常见错误是直接在 layui.use(['treeTable']) 中调用却报错 treeTable.expandAll is not a function——这通常因为:

  • 实际加载的是旧版自定义模块(比如叫 treetable 而非 treeTable),命名不一致
  • 未正确引入插件 JS 文件,或 extend 配置路径错误导致模块未注册
  • 渲染实例未保存,后续调用时找不到对应表格容器(elem 选择器不匹配)

正确做法是先确保渲染后拿到实例 ID 或 DOM 选择器,并在按钮点击时传入该标识:

$('#btn-expand').on('click', function() {
  treeTable.expandAll('#treeTableDemo'); // 传入表格容器的 id 选择器
});
$('#btn-fold').on('click', function() {
  treeTable.foldAll('#treeTableDemo');
});

使用 treetable-lay 插件时必须注意 extend 配置和模块名

如果你用的是第三方增强版 treetable-lay(目前最主流的树表方案),它的模块名不是 treeTable,而是你 extend 里定义的别名,比如 treetable。此时调用方式完全不同:

必须严格匹配 extend 中注册的名称,且初始化时要显式 use 该模块:

layui.config({
  base: '/static/modules/' // 指向 treetable-lay 所在父目录
}).extend({
  treetable: 'treetable-lay/treetable' // 这里定义的 key 就是后续 use 的模块名
});

layui.use(['treetable', 'table'], function() {
  var treetable = layui.treetable; // 注意:不是 layui.treeTable
  treetable.render({ elem: '#table1', url: '/api/tree' });

  $('#btn-expand').click(function() {
    treetable.expandAll('#table1'); // 参数仍是表格容器选择器
  });
});

容易踩的坑:

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

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

下载
  • base 路径末尾不加斜杠,或相对路径写错,会导致 404 Not Found 加载失败
  • 模块名大小写敏感:treetable ≠ Treetable
  • expandAll 必须在 render 成功执行后调用,否则表格 DOM 还未生成,操作无效

手动触发图标点击仅适用于原生 tree 组件,慎用于 treeTable

网上流传的“遍历 .layui-icon-addition 并 dispatchEvent”方案,本质是模拟用户点击行为,它只对 layui 原生 tree 组件有效,因为其 DOM 结构固定、图标类名稳定。但 treeTable 的展开图标是通过列模板动态渲染的,可能被包裹在 <div> 或 <code><span></span> 内,且 class 名可能带随机前缀或条件 class(如 layui-icon-triangle-r),DOM 查询极易失效。

所以除非你确认用的是 tree(不是 treeTable),否则不要用这种 hack 方式。它的问题包括:

  • 无法区分已加载子节点和需异步加载的节点,强行点击可能重复请求
  • 折叠时若某节点无子数据,图标可能根本没渲染,querySelectorAll 返回空数组
  • 与 done 回调、expandBefore 等生命周期钩子不兼容,业务逻辑易断裂

异步加载场景下 expandAll 的行为要特别留意

当树表配置了 tree.async(即子节点按需加载),expandAll 默认**不会自动拉取所有子级数据**,它只是把当前已加载节点的状态设为展开。这意味着顶层节点展开后,其子节点若尚未加载,仍显示“+”图标,点击才会发请求。

如果真需要“展开全部并加载所有层级”,得自己递归调用 asyncLoad 或改写 expandAll 行为——但这会显著增加请求数量和页面压力,不建议在大数据量下使用。更务实的做法是:

  • 限制默认展开深度(如 tree.view.expandLevel: 2)
  • 用 tree.async.url 返回完整子树数据,避免多次请求
  • 折叠全部前,主动调用 treeTable.reloadData() 清除已加载的子节点缓存,防止视觉状态错乱

真正难处理的从来不是“怎么点一下全展开”,而是“展开之后数据从哪来、要不要来、来了怎么稳住”。

相关文章

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

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

下载

相关标签:

layui

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

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2483

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

5363

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6390

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

5998

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

843

5

ajax教程
ajax教程

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

2023.06.14

2820

4

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

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

2023.08.31

360

5

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

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

2023.11.15

2653

5

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

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

2024.09.24

1161

6

热门下载

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

精品课程

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

共87课时 | 12.9万人学习

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

共89课时 | 11.1万人学习

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

共5课时 | 1.6万人学习