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.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
LongCat-AudioDiT-1BLongCat-AudioDiT 是一款基于扩散模型的文本转语音(TTS)模型,代表了当前该领域的最高水平(SOTA),它直接在波形潜空间中进行操作。00- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
HY-Embodied-0.5这是一套专为现实世界具身智能打造的基础模型。该系列模型采用创新的混合Transformer(Mixture-of-Transformers, MoT) 架构,通过潜在令牌实现模态特异性计算,显著提升了细粒度感知能力。Jinja00
FreeSql功能强大的对象关系映射(O/RM)组件,支持 .NET Core 2.1+、.NET Framework 4.0+、Xamarin 以及 AOT。C#00
项目优选
收起
deepin linux kernel
C
27
14
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
659
4.26 K
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.54 K
894
Ascend Extension for PyTorch
Python
503
609
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
391
285
暂无简介
Dart
905
218
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
69
21
昇腾LLM分布式训练框架
Python
142
168
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
939
862
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
1.33 K
108