news 2026/4/16 3:23:16

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 那样对所有行分页,而是主要针对根节点。如果需要更复杂的层级分页,可能需自定义扩展。

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 14:32:06

智慧农业ELK落地方案:数据驱动精准农业

对于智慧农业领域的ELK&#xff08;Elasticsearch, Logstash, Kibana&#xff09;落地方案&#xff0c;其核心在于构建一个能处理海量、多源、地理空间数据的监测与分析平台。根据研究&#xff0c;ELK不仅可用于日志分析&#xff0c;也特别适合处理物联网传感器数据&#xff0c…

作者头像 李华
网站建设 2026/4/16 14:31:49

Arbess从基础到实践(27) - 集成soular,使用soular用户统一认证登录

Arbess 是一款开源免费的 CI/CD 工具&#xff0c;支持免费私有化部署&#xff0c;轻量、简洁易用。本文将详细介绍如何安装Arbesssoular&#xff0c;实现统一认证登录。 1、soular 安装 1.1 安装 本文以CentOS操作系统为例。 下载&#xff0c;CentOS安装包下载地址&#xf…

作者头像 李华
网站建设 2026/4/16 12:44:02

GMSSL:国密算法SM2、SM3、SM4的高效实现

GMSSL是一个支持国家密码算法&#xff08;国密算法&#xff09;的开源密码工具库。GMSSL提供了与OpenSSL类似的功能&#xff0c;主要包括&#xff1a;国密算法实现&#xff08;SM2/SM3/SM4等&#xff09;&#xff1b;证书管理&#xff08;支持国密标准证书格式&#xff09;&…

作者头像 李华
网站建设 2026/4/16 11:11:41

08_软考_法律法规与标准化

知识产权基础知识 保护期限知识产权人的确定侵权判定其他法律细则标准化基础知识 标准的分类标准的编号

作者头像 李华
网站建设 2026/4/16 0:28:26

AI原生应用:开启视频生成新时代

AI原生应用:开启视频生成新时代 关键词:AI原生应用、视频生成、人工智能、深度学习、生成模型、应用场景、未来趋势 摘要:本文深入探讨AI原生应用如何开启视频生成的新时代。通过介绍相关核心概念,阐述核心算法原理及操作步骤,展示项目实战案例,分析实际应用场景,推荐工…

作者头像 李华
网站建设 2026/4/16 0:32:17

9 个高效降AI率工具,继续教育学生必备!

9 个高效降AI率工具&#xff0c;继续教育学生必备&#xff01; AI降重工具&#xff1a;高效降低AIGC率&#xff0c;让论文更自然 在当前学术写作中&#xff0c;随着AI技术的广泛应用&#xff0c;越来越多的学生和研究人员发现&#xff0c;使用AI生成的内容容易被查重系统识别为…

作者头像 李华