EasyUI Forum
May 14, 2024, 01:32:00 AM *
Welcome, Guest. Please login or register.

Login with username, password and session length
News:
 
   Home   Help Search Login Register  
Pages: [1]
  Print  
Author Topic: 分享:关于树的操作  (Read 17258 times)
nyr_jack
Newbie
*
Posts: 31


View Profile
« on: January 04, 2013, 06:53:57 PM »

场景分析:某些情况下,我们在分配权限或组织结构时,需要从已有的树形结构中选择某些节点,添加到一个空的新树中,用以在新生成的树中展现所选择的树形结构节点。
本代码基本上实现了该种情况,已经过测试,拿出来和大家分享一下,如有更好的做法,欢迎指出,谢谢!

html code:

<ul id="basicTree" class="easyui-tree" style="height:200px;" data-options="url:'data/testTree1_data.json',checkbox:true,lines:true,animate:true"></ul>
<a id="addItemBtn" class="easyui-linkbutton" onclick='addNode("#basicTree","#targetTree");'>添加&nbsp;&nbsp;&gt;&gt;</a><br><br><br>
<ul id="targetTree" class="easyui-tree" style="height:200px;" data-options="checkbox:true,lines:true"></ul>

javascript:

/**
 * 扩展方法,获得树的节点等级
 */
$.extend($.fn.tree.methods,{
    getLevel: function(jq, target){
        return $(target).find('span.tree-indent,span.tree-hit').length;
    }
});

/**
 * 判断该节点是否是根节点
 * @param tree
 * @param node
 * @returns {Boolean}
 */
function isRoot(tree,node){
   var level = $(tree).tree('getLevel',node.target);
   if(level == 1){
      return true;
   }else{
      return false;
   }
}

/**
 * 获得当前节点的根节点(get the root of current node)
 * @param tree
 * @param node
 * @returns
 */
function getRootByCurrentNode(tree,node){
   var level = $(tree).tree('getLevel',node.target);
   if(level == 1){      
      return node;
   }else{
      var parentNode = $(tree).tree('getParent',node.target);
      return getRootByCurrentNode(tree,parentNode);
   }         
}

/**
 * 获得该节点的所有父节点数组(get all parents of current node)
 * @param basicTree
 * @param node
 * @param nodeLevel
 * @param nodeparentArry
 * @returns
 */
function getParentArry(basicTree,node,nodeLevel,parentArry){
   if(nodeLevel == 1){
      return parentArry;
   }else{
      nodeLevel -= 1;
      var parent = $(basicTree).tree('getParent',node.target);
      parentArry.unshift(parent);
      return getParentArry(basicTree,parent,nodeLevel,parentArry);
   }
}

/**
 * 把basicTree中的节点添加到targetTree中(append the checked nodes of basicTree to targetTree)
 * @param basicTree
 * @param targetTree
 * @returns
 */
function addNode(basicTree,targetTree){
   var ckNodes = $(basicTree).tree('getChecked');
   for(var i = 0; i < ckNodes.length; i++){
      
      var nodeLevel = $(basicTree).tree('getLevel',ckNodes.target);
      var nodeData = $(basicTree).tree('getData',ckNodes.target);
      var root = getRootByCurrentNode(basicTree,ckNodes);
      
      if(!$(targetTree).tree('find',ckNodes.id)){
         var parentArry = new Array();
         parentArry =  getParentArry(basicTree,ckNodes,nodeLevel,parentArry);
         if(parentArry.length == 0){//所选节点为根节点
            $(targetTree).tree('append',{
               data:[nodeData]
            });
         }else{
            for(var j = 0; j < parentArry.length; j++){//添加该节点的所有父节点
               if(!$(targetTree).tree('find',parentArry[j].id)){
                  if(root.id == parentArry[j].id){
                     $(targetTree).tree('append',{
                        data:[{
                           id:parentArry[j].id,
                           text:parentArry[j].text
                        }]
                     });
                  }else{
                     var parentNode = $(targetTree).tree('find',parentArry[j-1].id);
                     $(targetTree).tree('append',{
                        parent:(parentNode?parentNode.target:null),
                        data:[{
                           id:parentArry[j].id,
                           text:parentArry[j].text
                        }]
                     });
                  }
               }
            }
            var parentNode = $(targetTree).tree('find',parentArry[parentArry.length-1].id);
            $(targetTree).tree('append',{
               parent:(parentNode?parentNode.target:null),
               data:[nodeData]
            });
         }
      }
   }
}
« Last Edit: January 05, 2013, 10:57:38 PM by nyr_jack » Logged
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines Valid XHTML 1.0! Valid CSS!