jQuery-TreeGrid:让层级数据展示更简单的实战指南
2026-03-14 04:18:03作者:温玫谨Lighthearted
从入门到精通的10个关键技巧
一、场景引入:为什么需要树形表格
在企业级应用开发中,我们经常会遇到需要展示层级关系数据的场景:
- 组织结构展示(如公司部门树)
- 文件目录浏览(如项目文件结构)
- 分类数据管理(如商品分类体系)
- 权限角色关系(如RBAC权限树)
传统表格无法直观展示这种层级关系,而普通树形结构又缺乏表格的规整布局和数据对比能力。jQuery-TreeGrid插件正是为解决这一矛盾而生,它将树形结构与表格展示完美结合,让层级数据展示既直观又专业。
二、核心功能解析
2.1 快速集成插件到现有项目
适用场景:新项目初始化或现有系统功能扩展
实现步骤:
-
准备基础环境
- 确保已引入jQuery库(建议版本3.x以上)
- 通过npm安装插件:
npm install jquery-treegrid - 或通过Git克隆仓库:
git clone https://gitcode.com/gh_mirrors/jq/jquery-treegrid
-
引入必要资源文件
<!-- 引入CSS样式 --> <link rel="stylesheet" href="css/jquery.treegrid.css"> <!-- 引入核心JS文件 --> <script src="js/jquery.treegrid.js"></script>
注意事项:
- 资源路径需根据项目实际目录结构调整
- 确保jQuery库在插件JS之前引入
- 生产环境建议使用压缩版本
jquery.treegrid.min.js
2.2 构建基础树形表格结构
适用场景:基础层级数据展示,如部门结构、分类列表
HTML结构示例:
<table id="deptTree">
<thead>
<tr>
<th>部门名称</th>
<th>负责人</th>
<th>员工数量</th>
</tr>
</thead>
<tbody>
<!-- 根节点 -->
<tr class="treegrid-1">
<td>技术部</td>
<td>张三</td>
<td>20</td>
</tr>
<!-- 子节点 -->
<tr class="treegrid-2 treegrid-parent-1">
<td>前端团队</td>
<td>李四</td>
<td>8</td>
</tr>
<tr class="treegrid-3 treegrid-parent-1">
<td>后端团队</td>
<td>王五</td>
<td>12</td>
</tr>
</tbody>
</table>
初始化代码:
$(function() {
// 基础初始化
$("#deptTree").treegrid();
});
核心概念:
treegrid-{id}:定义节点唯一标识treegrid-parent-{parentId}:定义节点父子关系- 无需额外嵌套结构,通过CSS类实现关系定义
三、实战技巧
3.1 高级初始化配置
适用场景:需要自定义树形表格行为时
配置示例:
$("#deptTree").treegrid({
// 初始状态:'expanded'展开,'collapsed'折叠
initialState: 'collapsed',
// 是否保存状态
saveState: true,
// 状态保存名称(用于cookie)
saveStateName: 'dept-tree-state',
// 树形结构所在列索引
treeColumn: 0,
// 展开/折叠事件回调
onExpand: function() {
console.log("节点已展开:" + $(this).treegrid('getNodeId'));
},
onCollapse: function() {
console.log("节点已折叠:" + $(this).treegrid('getNodeId'));
}
});
常用配置项说明:
initialState:控制初始展开状态saveState:启用状态记忆功能treeColumn:指定树形结构显示在哪一列- 事件回调:提供节点状态变化时的钩子函数
3.2 节点操作方法
适用场景:需要通过代码控制树形结构交互时
展开/折叠控制:
// 展开指定节点
$("#deptTree").treegrid('expand', nodeId);
// 折叠指定节点
$("#deptTree").treegrid('collapse', nodeId);
// 切换节点状态
$("#deptTree").treegrid('toggle', nodeId);
// 展开所有节点
$("#deptTree").treegrid('expandAll');
// 折叠所有节点
$("#deptTree").treegrid('collapseAll');
节点信息获取:
// 获取节点ID
var nodeId = $("#deptTree tr:eq(1)").treegrid('getNodeId');
// 获取父节点ID
var parentId = $("#deptTree tr:eq(1)").treegrid('getParentNodeId');
// 判断是否为叶子节点
var isLeaf = $("#deptTree tr:eq(1)").treegrid('isLeaf');
// 获取节点深度
var depth = $("#deptTree tr:eq(1)").treegrid('getDepth');
四、常见误区
4.1 表格结构设计误区
错误示例:
<!-- 错误:使用嵌套table结构 -->
<tr>
<td>
技术部
<table>
<tr><td>前端团队</td></tr>
<tr><td>后端团队</td></tr>
</table>
</td>
</tr>
正确做法:
- 所有节点平级排列
- 通过CSS类
treegrid-*定义关系 - 保持表格结构的扁平化
4.2 事件绑定问题
避坑指南:
- 不要直接为.expander元素绑定click事件
- 使用插件提供的onExpand/onCollapse回调
- 需要自定义交互时,通过事件委托实现:
// 正确的事件委托方式
$("#deptTree").on("click", ".treegrid-expander", function(e) {
var node = $(this).closest('tr');
// 自定义逻辑...
// 阻止事件冒泡,避免与插件内置逻辑冲突
e.stopPropagation();
});
五、进阶技巧
5.1 自定义展开/折叠图标
适用场景:需要统一网站风格或实现个性化视觉效果
实现步骤:
- 准备自定义图标(建议16x16像素)
- 修改CSS样式:
/* 自定义展开图标 */
.treegrid-expander-expanded{
background-image: url(../img/custom-collapse.png);
background-size: contain;
}
/* 自定义折叠图标 */
.treegrid-expander-collapsed{
background-image: url(../img/custom-expand.png);
background-size: contain;
}
- 调整图标尺寸(如需要):
.treegrid-expander {
width: 20px; /* 调整宽度 */
height: 20px; /* 调整高度 */
}
5.2 动态加载节点数据
适用场景:大数据量层级结构,需要按需加载子节点
实现思路:
// 1. 初始化时只加载根节点
$("#deptTree").treegrid({
onExpand: function() {
var node = $(this);
var nodeId = node.treegrid('getNodeId');
// 2. 判断是否已加载子节点
if (!node.data('childrenLoaded')) {
// 3. AJAX加载子节点数据
$.getJSON('/api/children/' + nodeId, function(data) {
// 4. 动态创建子节点TR元素
var html = '';
$.each(data, function(index, item) {
html += '<tr class="treegrid-' + item.id + ' treegrid-parent-' + nodeId + '">';
html += '<td>' + item.name + '</td>';
html += '<td>' + item.manager + '</td>';
html += '<td>' + item.count + '</td>';
html += '</tr>';
});
// 5. 添加到表格并重新初始化
node.after(html);
$("#deptTree").treegrid('refresh');
// 6. 标记为已加载
node.data('childrenLoaded', true);
});
}
}
});
5.3 与Bootstrap样式集成
适用场景:使用Bootstrap框架的项目,保持样式一致性
实现步骤:
- 引入Bootstrap适配文件:
<!-- Bootstrap 2.x -->
<script src="js/jquery.treegrid.bootstrap2.js"></script>
<!-- 或 Bootstrap 3.x -->
<script src="js/jquery.treegrid.bootstrap3.js"></script>
- 使用Bootstrap表格样式:
<table id="deptTree" class="table table-striped table-hover">
<!-- 表格内容 -->
</table>
- 初始化时指定Bootstrap主题:
$("#deptTree").treegrid({
// Bootstrap相关配置
expanderTemplate: '<span class="glyphicon glyphicon-chevron-right treegrid-expander"></span>'
});
六、干货总结
- 核心优势:无需复杂嵌套结构,通过CSS类定义层级关系,实现简单却功能强大
- 性能优化:大数据量时建议使用动态加载,避免一次性渲染过多节点
- 状态管理:利用
saveState选项可记住用户操作习惯,提升体验 - 扩展能力:通过事件回调和自定义模板,可以实现各种个性化需求
- 版本选择:根据项目中Bootstrap版本选择对应的适配文件
通过本文介绍的技巧,你可以轻松掌握jQuery-TreeGrid的使用方法,并将其灵活应用于各种层级数据展示场景。无论是简单的部门列表还是复杂的权限管理系统,这款插件都能帮助你构建出专业、高效的树形表格界面。
登录后查看全文
热门项目推荐
相关项目推荐
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
jiuwenclawJiuwenClaw 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。Python0204- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
AtomGit城市坐标计划AtomGit 城市坐标计划开启!让开源有坐标,让城市有星火。致力于与城市合伙人共同构建并长期运营一个健康、活跃的本地开发者生态。01
awesome-zig一个关于 Zig 优秀库及资源的协作列表。Makefile00
项目优选
收起
deepin linux kernel
C
27
12
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
608
4.05 K
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
69
21
暂无简介
Dart
850
205
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.47 K
829
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
12
1
喝着茶写代码!最易用的自托管一站式代码托管平台,包含Git托管,代码审查,团队协作,软件包和CI/CD。
Go
24
0
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
924
774
🎉 基于Spring Boot、Spring Cloud & Alibaba、Vue3 & Vite、Element Plus的分布式前后端分离微服务架构权限管理系统
Vue
235
152
昇腾LLM分布式训练框架
Python
131
157