Categories: jQuery EasyUI 教程

jQuery EasyUI 树形菜单 – 树形菜单加载父/子节点

jQuery EasyUI 树形菜单 – 树形菜单加载父/子节点

通常表示一个树节点的方式就是在每一个节点存储一个parentid,这个也被称为邻接列表模型。直接加载这些数据到树形菜单(Tree)是不允许的,但是我们可以在加载树形菜单之前,把它转换为标准标准的树形菜单(Tree)数据格式。树(Tree)插件提供一个loadFilter选项函数,它可以实现这个功能。它提供一个机会来改变任何一个进入数据。 

本教程向您展示如何使用loadFilter函数加载父/子节点到树形菜单(Tree)。

父/子节点数据

 [
 {"id":1,"parendId":0,"name":"Foods"},
 {"id":2,"parentId":1,"name":"Fruits"},
 {"id":3,"parentId":1,"name":"Vegetables"},
 {"id":4,"parentId":2,"name":"apple"},
 {"id":5,"parentId":2,"name":"orange"},
 {"id":6,"parentId":3,"name":"tomato"},
 {"id":7,"parentId":3,"name":"carrot"},
 {"id":8,"parentId":3,"name":"cabbage"},
 {"id":9,"parentId":3,"name":"potato"},
 {"id":10,"parentId":3,"name":"lettuce"}
 ]

使用 loadFilter 创建树形菜单(Tree)

 $(#tt).tree({
  url: data/tree6_data.json,
  loadFilter: function(rows){
   return convert(rows);
  }
 });

转换的实现

 function convert(rows){
  function exists(rows, parentId){
   for(var i=0; i<rows.length; i++){     
                            if (rows[i].id == parentId) return true;    
                        }    
                        return false;   
                 }      
                 var nodes = [];   
                 // get the top level nodes   
                 for(var i=0; i<rows.length; i++){    
                     var row = rows[i];    
                     if (!exists(rows, row.parentId)){     
                         nodes.push({      
                             id:row.id,      
                             text:row.name     
                         });    
                     }   
                 }      
                 var toDo = [];   
                 for(var i=0; i<nodes.length; i++){    
                     toDo.push(nodes[i]);   
                 }   
                 while(toDo.length){    
                    var node = toDo.shift(); // the parent node    
                    // get the children nodes    
                    for(var i=0; i<rows.length; i++){     
                        var row = rows[i];     
                        if (row.parentId == node.id){      
                            var child = {id:row.id,text:row.name};      
                            if (node.children){       
                                node.children.push(child);      
                            } else {       
                                node.children = [child];      
                            }      
                            toDo.push(child);     
                         }    
                     }   
                 }   
                 return nodes;  
        } 

下载 jQuery EasyUI 实例

jeasyui-tree-tree6.zip

冒牌SEO

前端开发者,欢迎大家一起沟通和交流。

Share
Published by
冒牌SEO

Recent Posts

聊聊vue3中的defineProps

在Vue 3中,defineP…

4 天 ago

在 Chrome 中删除、允许和管理 Cookie

您可以选择删除现有 Cooki…

1 周 ago

自定义指令:聊聊vue中的自定义指令应用法则

今天我们来聊聊vue中的自定义…

2 周 ago

聊聊Vue中@click.stop和@click.prevent

一起来学下聊聊Vue中@cli…

3 周 ago

Nginx 基本操作:启动、停止、重启命令。

我们来学习Nginx基础操作:…

4 周 ago

Vue3:手动清理keep-alive组件缓存的方法

Vue3中手动清理keep-a…

4 周 ago