EasyUI的treegrid实现自动顺序选择行节点

 这两天用EasyUI的treegrid写了一个根据滚动条滚动时相应的依次选中treegrid中的行的demo,之前用了一个递归实现不了,所以用了两个递归实现的,效果如图: 

这里的使用的easyui 1.4版本,这个treegrid的方法很少,所以实现起来很费劲,需要自己写函数。好了,上代码:

  1 <%@ include file=‘/main/head.jsp‘ %>
  2
  3 <div data-options="region:‘center‘,title:‘项目时刻进度展示‘,split:true">
  4
  5     <table id="i_dg" style="width:100%;height:300px;margin-bottom:20px;"></table>
  6
  7     <div id="i_slider" style="height:200px;margin-top:20px;"></div>
  8
  9 </div>
 10
 11 <script type="text/javascript">
 12
 13         var jTestData=[
 14             {‘itemid‘:11,‘productid‘:‘sss‘,‘arr‘:[{subname:‘sds1d‘,subsex:‘sdsd‘},{subname:‘sdsd‘,subsex:‘sdsd‘},{subname:‘sdsd‘,subsex:‘sdsd‘}]},
 15             {‘itemid‘:15,‘productid‘:‘sdds‘,‘arr‘:[{subname:‘sds2d‘,subsex:‘sdsd‘},{subname:‘sdsd‘,subsex:‘sdsd‘},{subname:‘sdsd‘,subsex:‘sdsd‘}]},
 16             {‘itemid‘:14,‘productid‘:‘sffss‘,‘arr‘:[{subname:‘sds3d‘,subsex:‘sdsd‘},{subname:‘sdsd‘,subsex:‘sdsd‘},{subname:‘sdsd‘,subsex:‘sdsd‘}]},
 17             {‘itemid‘:13,‘productid‘:‘ssggs‘,‘arr‘:[{subname:‘sd4sd‘,subsex:‘sdsd‘},{subname:‘sdsd‘,subsex:‘sdsd‘},{subname:‘sdsd‘,subsex:‘sdsd‘}]},
 18             {‘itemid‘:12,‘productid‘:‘sshhs‘,‘arr‘:[{subname:‘sd5sd‘,subsex:‘sdsd‘},{subname:‘sdsd‘,subsex:‘sdsd‘},{subname:‘sdsd‘,subsex:‘sdsd‘}]}
 19         ];
 20
 21         var jTestData2=[
 22             {"id":10,"name":‘xxx1‘,"pro":‘ssssss1‘,"children":[
 23                 {"id":11,"name":‘sds1‘,"pro":‘sdsd1‘},
 24                 {"id":12,"name":‘sds2‘,"pro":‘sdsd2‘,"children":[
 25                 {"id":121,"name":‘sds21‘,"pro":‘sdsd1‘},
 26                 {"id":122,"name":‘sds22‘,"pro":‘sdsd2‘},
 27                 {"id":123,"name":‘sds23‘,"pro":‘sdsd3‘}]},
 28                 {"id":13,"name":‘sds3‘,"pro":‘sdsd3‘}]},
 29
 30                 {"id":20,"name":‘xxx2‘,"pro":‘ssssss2‘,"children":[
 31                 {"id":21,"name":‘sds21‘,"pro":‘sdsd1‘},
 32                 {"id":22,"name":‘sds22‘,"pro":‘sdsd2‘},
 33                 {"id":23,"name":‘sds23‘,"pro":‘sdsd3‘}]},
 34
 35                 {"id":30,"name":‘xxx3‘,"pro":‘ssssss3‘,"children":[
 36                 {"id":31,"name":‘sds31‘,"pro":‘sdsd1‘},
 37                 {"id":32,"name":‘sds32‘,"pro":‘sdsd2‘},
 38                 {"id":33,"name":‘sds33‘,"pro":‘sdsd3‘}]}
 39         ];
 40
 41          var jTestData3=[
 42             {"id":10,"name":‘10‘,"pro":‘ssssss1‘,"children":[
 43                 {"id":11,"name":‘11‘,"pro":‘sdsd1‘},
 44                 {"id":12,"name":‘12‘,"pro":‘sdsd2‘,"children":[
 45                 {"id":121,"name":‘121‘,"pro":‘sdsd1‘},
 46                 {"id":122,"name":‘122‘,"pro":‘sdsd2‘,"children":[
 47                 {"id":1221,"name":‘1221‘,"pro":‘sdsd1‘},
 48                 {"id":1222,"name":‘1222‘,"pro":‘sdsd1‘}
 49                 ]},
 50                 {"id":123,"name":‘123‘,"pro":‘sdsd3‘}]},
 51                 {"id":13,"name":‘13‘,"pro":‘sdsd3‘},
 52                 {"id":14,"name":‘14‘,"pro":‘sdsd4‘}]},
 53
 54                 {"id":20,"name":‘20‘,"pro":‘ssssss2‘,"children":[
 55                 {"id":21,"name":‘21‘,"pro":‘sdsd1‘},
 56                 {"id":22,"name":‘22‘,"pro":‘sdsd2‘},
 57                 {"id":23,"name":‘23‘,"pro":‘sdsd3‘}]},
 58
 59                 {"id":30,"name":‘30‘,"pro":‘ssssss3‘,"children":[
 60                 {"id":31,"name":‘31‘,"pro":‘sdsd1‘},
 61                 {"id":32,"name":‘32‘,"pro":‘sdsd2‘},
 62                 {"id":33,"name":‘33‘,"pro":‘sdsd3‘}]}
 63         ];
 64
 65
 66         //初始化数据表格
 67         function fInitDatagrid(){
 68
 69             $(‘#i_dg‘).treegrid({
 70                 data:jTestData3,
 71                 rownumbers:true,
 72                 idField:‘id‘,
 73                 treeField:‘name‘,
 74                 columns:[[
 75                     {title:‘Task Name‘,field:‘name‘,width:180},
 76                     {field:‘pro‘,title:‘pro‘,width:160,align:‘right‘}
 77                 ]],
 78                 onLoadSuccess:function(row,data){
 79                     $(‘#i_dg‘).treegrid("collapseAll");
 80                     $(‘#i_dg‘).treegrid("select",data[0].id);//通过id进行选择
 81                     //$("#i_dg").treegrid("expand",data[0].id);
 82                 }
 83             });
 84
 85         }
 86
 87
 88         //根据node的Id获取当前节点的子一级节点
 89         function fSelectChildNode(sNodeId){
 90             var aChild=[];
 91             var aChildren=$("#i_dg").treegrid("getChildren",sNodeId);//获取所有子节点
 92             var    nChildLevel=$("#i_dg").treegrid("getLevel",sNodeId)+1;//获取子一级节点的节点等级
 93
 94             if(aChildren.length>0){
 95                 for (var i = 0; i < aChildren.length; i++) {
 96
 97                     if($("#i_dg").treegrid("getLevel",aChildren[i].id)==nChildLevel){
 98                         aChild.push(aChildren[i]);
 99                     }
100
101                 }
102             }
103             return aChild;
104         }
105
106
107         //获取当前节点的所有兄弟节点
108         function fSelectSiblingNode(sNodeId){
109
110             if($("#i_dg").treegrid("getLevel",sNodeId)==1){//如果当前节点是根节点
111                 return $("#i_dg").treegrid("getRoots");
112             }
113
114             var oPerNode= $("#i_dg").treegrid("getParent",sNodeId);//获取当前节点的父级节点
115             //var aSiblingNode =fSelectChildNode(oPerNode.id);//获取当前节点的兄弟节点
116             return fSelectChildNode(oPerNode.id);
117         }
118
119
120         //获取当前节点的下一个节点(无论该节点和下一个节点是否包含子节点)
121         var oNextNode=null;
122         function fSelectNextNode(sNodeId) {
123             var aSiblingNode=fSelectSiblingNode(sNodeId);
124
125             for(var i=0; i<aSiblingNode.length;i++){
126                 if (aSiblingNode[i].id==sNodeId && i < aSiblingNode.length-1) {//不是兄弟节点的最后一个节点
127                     var k=i+1;
128                     //return aSiblingNode[k];//这里return返回,只是结束本次循环,arguments.callee(perNode.id)这个调用几次(递归执行几次)return完了之后,会接着执行上次没有执行完的for循环
129                     oNextNode = aSiblingNode[k];
130                     break;
131                 }else if(aSiblingNode[i].id==sNodeId && i == aSiblingNode.length-1){//如果当前节点是最后一个节点,需要跳出返回父节点的下一个节点
132                     if($("#i_dg").treegrid("getLevel",sNodeId)>1){//当前节点不是根节点
133                         var oPerNode= $("#i_dg").treegrid("getParent",sNodeId);//获取当前节点的父节点
134                         arguments.callee(oPerNode.id);
135                     }else{//如果是根节点的最后一个,执行完了
136                         return null;
137                     }
138                 }
139                 /*else{
140                     continue;
141                 }*/
142             }
143
144         }
145
146
147         //选中下一个节点
148         var aNextChildren;
149         function fSelectNode(oRowData,bFlag){
150
151             if(!oRowData){
152                 return false;
153             }
154
155             if(bFlag){
156                 if($("#i_dg").treegrid("getRoots")[0].id!=oRowData.id && $("#i_dg").treegrid("getLevel",oRowData.id)>1){
157                     fSelectNextNode(oRowData.id);
158                     oRowData=oNextNode;
159                 }
160             }
161             aNextChildren = fSelectChildNode(oRowData.id);
162             if(aNextChildren.length > 0){//如果当前节点有子节点
163                 //$(‘#i_dg‘).treegrid("select",oRowData.id);
164                 $("#i_dg").treegrid("expand",oRowData.id);
165
166                 //$(‘#i_dg‘).treegrid("select",aNextChildren[0].id);
167                 arguments.callee(aNextChildren[0]);
168
169                 }else{//如果当前节点没有子节点
170                     $(‘#i_dg‘).treegrid("select",oRowData.id);
171
172                 }
173
174         }
175
176         //初始化滑动条
177         function fInitSlider(){
178             $(‘#i_slider‘).slider({
179                 mode: ‘h‘,
180                 width:800,
181                 height:200,
182                 showTip:true,
183                 min:0,
184                 max:400,
185                 value:0,
186                 step:10,
187                 tipFormatter: function(value){
188                     return value + ‘%‘;
189                 },
190                 onChange:function(){fSelectNode($("#i_dg").treegrid("getSelected"),true);}
191             });
192         }
193
194         //设置Timer
195         function fSetTimer(){
196             var terval=setInterval(function(){
197                 var nValue=$("#i_slider").slider("getValue");
198                 $("#i_slider").slider("setValue",nValue + 10);
199             },1000);
200         }
201
202
203         $(function(){
204
205            fInitDatagrid();
206            fInitSlider();
207            fSetTimer();
208         });
209
210 </script>
211
212 <%@ include file=‘/main/footer.jsp‘ %>

上边注释很全,请多多指教。

时间: 2024-10-18 14:54:44

EasyUI的treegrid实现自动顺序选择行节点的相关文章

easyui Tree模拟级联勾选cascadeCheck,节点选择,父节点自动选中,节点取消,父节点自动取消选择,节点选择,所有子节点全部选择,节点取消,所有子节点全部取消勾选

最近项目中用到easyui tree,发现tree控件的cascadeCheck有些坑,不像miniui 的tree控件,级联勾选符合业务需求,所以就自己重新改写了onCheck事件,符合业务需求.网上百度了很多资料,都没有完全符合自己业务场景的,所以就自己动手写咯. 先说一下自己的业务需求: 1.选中节点,上级以及所有直系上级节点自动选中,所有下级子孙节点全部自动选中: 2.取消选择节点,如果兄弟节点都未选择,则上级以及所有直系上级节点自动取消选择,所有下级子孙节点全部取消选中. 这里说一下c

jquery easyui datagrid 获取Checked选择行(勾选行)数据

原文:jquery easyui datagrid 获取Checked选择行(勾选行)数据 getSelected:取得第一个选中行数据,如果没有选中行,则返回 null,否则返回记录. getSelections:取得所有选中行数据,返回元素记录的数组数据. getChecked:取得checkbox选择行的数据,返回元素记录的数组数据. getSelected跟getSelections是选中行,而且getChecked是选择行. 选中行的意思就是,我们单击到某一个行,这个时候该行的背景色为

第二百二十八节,jQuery EasyUI,TreeGrid(树形表格)组件

jQuery EasyUI,TreeGrid(树形表格)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 TreeGrid(树形表格)组件的使用方法,这个组件依赖于 DataGrid(数据表格)组件. 一.加载方式 建立一个 JSON 文件 [ { "id": 1, "name": "系统管理", "date": "2015-05-10", &quo

SSH+Easyui之TreeGrid树形展现数据

本文介绍Struts2.Spring.Hibernate与easyui的TreeGrid结合,以树的形式展现数据库中数据.在开发中会碰到很多需要以树的形式展现数据,如导航条.权限管理模块中的资源管理,通常在数据库中都是以树的形式存在.例子程序以资源管理为例,使用treegrid展现资源管理子模块的数据.最终效果如下图: 使用easyui使用树形展现很简单,只需将<table>标签的class设为easyui-treegrid即可 <body class="easyui-layo

easyUI中treegrid组件构造树形表格(简单数据类型)+ssm后台

这几天做的项目要求用树形表格的形式展示一部分数据,于是就想到了使用easyUI的treegrid组件,但几经翻查各种资料,发现数据类型大多采取标准数据类型,即包含children元素的数据类型,小编查遍各种资料,几经实验,小编找到了一种使用简单数据类型的展示树形表格的方法.在这里介绍给大家,仅供参考: 框架使用的是ssm框架,数据库用的是oracle,其中数据库中要展示的表设计成大致如下的样子: 参考了一下easyUI的demo中给出的数据类型,如下格式: 打开里面显示如下: 这是一个json串

调用平台删除选择行数据方法注意事项

调用平台智能向导中删除选择行数据方法:网格部件1.DeleteSelectedRows() 时需要将网格部件属性"允许多选"勾选上:如下图所示: 原文地址:http://bbs.delit.cn/thread-712-1-1.html 转载请注明出处: 撰写人:度量科技http://www.delit.cn

平台网格部件删除选择行

删除网格部件选择行,未删除数据库的数据.需要勾选网格部件的"允许多选"属性,才可以删除多行:多选数据时按Ctrl键.  新建一个窗体,绑定只读业务表,在窗体功能管理中添加一个"删除选择行数据"功能,具体代码如下: 运行效果:  按住Ctrl键,选择网格中的多条数据后,点击"删除选择行数据"按钮,将从网格中删除选中的这些数据,但是未从数据库中删除,所以点击"刷新"按钮删除的数据将从新显示. 原文地址:http://bbs.del

eclipse重的自动提示与行号和快捷图标的显示

显示行号:Window->Preferences->Gerenal->Editors->Text Editors然后在show line number上打对勾自动提示:Window->Preferences->java->Editor->Cintent Assist->Auto activation triggers for java     在后边框中写想要提示的内容 显示eclipse中的快捷图标:Window->show  toolbar

将一个字符串数组的元素顺序时行反转

//练习:将一个字符串数组的元素顺序时行反转string[] names={"我","是","好人"};for(int i=0;i<names.Length/2;i++){ string temp=names[i]; names[i]=names[names.Length-1-i]; names[names.Length-1-i]=temp;}