当前位置: 首页 > news >正文

jQuery EasyUI 树形菜单 - 树形网格添加分页

jQuery EasyUI 树形网格(TreeGrid) - 添加分页

jQuery EasyUI 的 TreeGrid继承自 DataGrid,因此支持pagination: true属性来启用分页功能。但由于 TreeGrid 是层级结构,分页通常只针对顶级根节点进行(子节点通过动态加载展开)。

有两种常见实现方式:

  1. 服务器端分页(Server Side Pagination):推荐用于大数据量。分页只加载当前页的根节点,子节点按需动态加载。
  2. 客户端分页(Client Side Pagination):一次性加载全部数据,在前端模拟分页(适合数据量不大)。
示例1:服务器端分页 + 动态加载子节点(推荐)

启用分页后,TreeGrid 会自动发送pagerowsid参数:

  • 首次加载/翻页:id=0(或无),返回当前页根节点。
  • 展开节点:id=父节点ID,返回该节点的子节点(不分页)。

HTML 部分

<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>TreeGrid 服务器端分页 + 动态加载</title><linkrel="stylesheet"type="text/css"href="https://www.jeasyui.com/easyui/themes/default/easyui.css"><linkrel="stylesheet"type="text/css"href="https://www.jeasyui.com/easyui/themes/icon.css"><scripttype="text/javascript"src="https://code.jquery.com/jquery-1.12.4.min.js"></script><scripttype="text/javascript"src="https://www.jeasyui.com/easyui/jquery.easyui.min.js"></script></head><body><h2>TreeGrid - 服务器端分页(仅根节点分页)</h2><tableid="tg"class="easyui-treegrid"style="width:800px;height:500px"data-options="url:'treegrid_pagination.php', method:'get', idField:'id', treeField:'name', pagination: true, pageSize: 10, rownumbers: true, lines: true"><thead><tr><thfield="name"width="300">名称</th><thfield="size"width="100"align="right">大小</th><thfield="date"width="150">修改日期</th></tr></thead></table></body></html>

服务器端示例(treegrid_pagination.php)

<?php$page=isset($_GET['page'])?intval($_GET['page']):1;$rows=isset($_GET['rows'])?intval($_GET['rows']):10;$id=isset($_GET['id'])?intval($_GET['id']):0;// 父节点ID// 模拟数据库(实际替换为你的查询)$allRoots=50;// 假设有50个根节点if($id>0){// 返回子节点(不分页)$children=array();for($i=1;$i<=5;$i++){$children[]=array('id'=>$id*10+$i,'name'=>'子节点 '.($id*10+$i),'size'=>rand(100,1000).'KB','date'=>'2025-12-17');}echojson_encode($children);}else{// 返回当前页根节点 + total$offset=($page-1)*$rows;$data=array();for($i=$offset+1;$i<=$offset+$rows&&$i<=$allRoots;$i++){$data[]=array('id'=>$i,'name'=>'根节点 '.$i,'size'=>'','date'=>'2025-12-17','state'=>'closed'// 有子节点时设置closed,显示展开图标);}$result=array('total'=>$allRoots,'rows'=>$data);echojson_encode($result);}?>

关键点

  • 根节点需设置"state": "closed"以显示展开图标。
  • 返回格式:翻页时{total: N, rows: [...]};加载子节点时直接数组[{...}, {...}]
示例2:客户端分页(一次性加载全部数据)

适用于数据量不大的场景。通过扩展loadFilter实现仅分页顶级节点,已展开的子节点会附加显示。

完整代码(基于官方 Demo)

<tableid="tg"class="easyui-treegrid"style="width:700px;height:500px"data-options="url:'treegrid_full_data.json', idField:'id', treeField:'name', pagination: true, pageSize: 10"><thead><tr><thfield="name"width="300">名称</th><thfield="size"width="100">大小</th><thfield="date"width="150">日期</th></tr></thead></table><scripttype="text/javascript">functionpagerFilter(data){if(typeofdata.length=='number'&&typeofdata.splice=='function'){// 判断数据是否是数组data={total:data.length,rows:data}}vardg=$(this);varopts=dg.treegrid('options');varpager=dg.treegrid('getPager');pager.pagination({onSelectPage:function(pageNum,pageSize){opts.pageNumber=pageNum;opts.pageSize=pageSize;pager.pagination('refresh',{pageNumber:pageNum,pageSize:pageSize});dg.treegrid('loadData',data);}});if(!data.originalRows){data.originalRows=data.rows;}vartopRows=[];varchildRows=[];$.each(data.originalRows,function(i,row){if(row._parentId){childRows.push(row);}else{topRows.push(row);}});data.total=topRows.length;varstart=(opts.pageNumber-1)*parseInt(opts.pageSize);varend=start+parseInt(opts.pageSize);data.rows=$.extend(true,[],topRows.slice(start,end).concat(childRows));returndata;}$(function(){$('#tg').treegrid({loadFilter:pagerFilter}).treegrid('clientPaging');});</script>
官方参考
  • 服务器端分页教程:https://www.jeasyui.com/tutorial/tree/treegrid4.php
  • 服务器端分页 Demo:https://www.jeasyui.com/tutorial/tree/treegrid4_demo.html
  • 客户端分页 Demo:https://www.jeasyui.com/demo/main/index.php?plugin=TreeGrid&theme=default&dir=ltr&pitem=Server%20Side%20Pagination (选择 Server Side Pagination 或 Client Side Pagination)

注意:TreeGrid 的分页不像普通 DataGrid 那样对所有行分页,而是主要针对根节点。如果需要更复杂的层级分页,可能需自定义扩展。

如果需要结合搜索、编辑或其他功能,或你的后端语言具体代码,请提供更多细节!

http://www.cnnetsun.cn/news/138192.html

相关文章:

  • SQL SERVER——通过计划任务方式每月对配置数据、审计数据等进行备份
  • 前端——跨平台桌面应用开发实践
  • OpenAI 的反击!GPT-5.2 强行拉开代差,Gemini 3 和 Claude 4 还有机会吗?
  • 零售打工人加薪难?靠这张证,我在激烈竞争里站稳了脚跟
  • 基于springboot的多媒体素材库的开发与应用毕业论文+PPT(附源代码+演示视频)
  • 从离线语音到多模态智能体四博智联 AI 硬件整体解决方案全景解析
  • 我发现跨医院联合训练让诊断准确率飙升后来才知道是横向联邦学习在数据孤岛中的绝招
  • 性能压测工具:wrk
  • 论文引用标注工具排名2025:6大平台+自动规范推荐
  • Kotaemon AWS EC2部署实例:国际业务首选
  • 实在没货,简历(软件测试)咋写?
  • 网约车服务端线上流量巡检与测试验收技术
  • 公考日记7
  • 火电一次调频、自抗扰调频及群智能算法智能调频在MATLAB/Simulink中的应用
  • 科研实验室温湿度监控新范式:以太网 POE 技术全场景解决方案
  • RV1126 NO.57:ROCKX+RV1126人脸识别推流项目之读取人脸图片并把特征值保存到sqlite3数据库
  • 探索SAR ADC:45nm工艺下的高速高精度设计
  • 【小增长技术团队东哥分享】Electron vs Electron-Vite vs Electron-Egg:桌面端开发到底该选谁?
  • 测试价值的量化评估:从成本中心到价值证明的路径探索
  • 测试领导力:在敏捷洪流中筑造质量堤坝
  • C++常用设计模式
  • Spring Boot 自动配置深度解析:原理、实战与源码追踪
  • 无代码解决方案:破解企业数字化转型效率困局
  • SAM (Segment Anything Model):万物皆可分割-k学长深度学习专栏
  • Mysql 报错 “Public Key Retrieval is not allowed”
  • 熊市中最适用的公式==底部建仓
  • 100G双光口网卡技术解析:Intel E810-CAM2方案的性能与应用突破
  • BioSIM抗人组蛋白H1抗体SIM0385:广泛应用于表观遗传学、染色质结构分析等领域
  • 智慧灯杆数字孪生系统:“多杆合一“技术实现
  • SCI一稿多投会不会被发现?