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的使用方法,并将其灵活应用于各种层级数据展示场景。无论是简单的部门列表还是复杂的权限管理系统,这款插件都能帮助你构建出专业、高效的树形表格界面。
登录后查看全文
热门项目推荐
相关项目推荐
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0212
cann-learning-hubCANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。Jupyter Notebook0137
JoyAI-EchoJoyAI-Echo,这是一个独立的、仅用于推理的版本,旨在实现分钟级多镜头音视频生成。它采用了经过蒸馏的DMD生成器、配对的跨模态记忆以及故事级别的一致性。其性能的核心在于,一个跨模态视听记忆库能够在长达五分钟的视频中保持角色外观和语音音色的一致性。同时,一个训练后处理流程将基于记忆的强化学习与分布匹配蒸馏相结合,实现了7.5倍的速度提升,显著增强了视觉质量和对齐效果。00
GLM-5.2智谱开源 GLM-5.2,这是针对长文本任务的最新旗舰模型。相较于前代产品 GLM-5.1,它在长文本任务处理能力上实现了显著飞跃,并且首次在稳定的 100 万 token 上下文中提供这一能力。Jinja00
SwanLab⚡️SwanLab - an open-source, modern-design AI training tracking and visualization tool. Supports Cloud / Self-hosted use. Integrated with PyTorch / Transformers / LLaMA Factory / veRL/ Swift / Ultralytics / MMEngine / Keras etc.Python00
tiny-universe《大模型白盒子构建指南》:一个全手搓的Tiny-UniverseJupyter Notebook03
热门内容推荐
最新内容推荐
项目优选
收起
deepin linux kernel
C
32
16
暂无描述
Dockerfile
774
5.07 K
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
872
2.01 K
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
468
461
Ascend Extension for PyTorch
Python
757
960
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
696
1.4 K
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.1 K
1.14 K
本仓库是 Flutter SDK 与 Flutter Engine 的 OpenHarmony 适配版本,由 CPF-Flutter 团队维护。开发者可使用熟悉的 Flutter 技术栈开发 OpenHarmony 应用,3.35.7 及以后的适配版本可基于本仓库源码构建支持 OpenHarmony 的 Flutter Engine。
Dart
1.03 K
271
昇腾LLM分布式训练框架
Python
183
230
CANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。
Python
1.03 K
646