EasyUI Forum

General Category => EasyUI for jQuery => Topic started by: varonica on December 28, 2012, 12:29:27 AM



Title: Get parent node!!
Post by: varonica on December 28, 2012, 12:29:27 AM
Hello sir, Im trying to use "getParent" method of tree, but how can i get a parent of parent node ? I did try with the following code:
Code:
onSelect: function(node){ 
      $('#tree').combotree('tree').tree('getParent', node.target).tree('getParent', node.target);
}
Please help me sir :( :'( :'(


Title: Re: Get parent node!!
Post by: stworthy on December 28, 2012, 12:47:38 AM
Please try the code below.
Code:
var t = $('#tree').combotree('tree'); // get the tree object
var p = t.tree('getParent', node.target);
if (p){
  p = t.tree('getParent', p.target);
}
alert(p.text);


Title: Re: Get parent node!!
Post by: varonica on December 28, 2012, 01:34:12 AM
Thanks sir, it works!  But Is there a way to get all parents of parent node until a root node ?


Title: Re: Get parent node!!
Post by: patana on January 02, 2013, 07:35:23 AM
Please, take a look at it:
Code:
<select id="cc" class="easyui-combotree" data-options="url:'../tree/tree_data1.json'" multiple style="width:200px;"></select> 
<script>
var nodes = $('#cc').tree('getChecked', 'indeterminate');
</script>
Hope it works as your desire!


Title: Re: Get parent node!!
Post by: nyr_jack on January 05, 2013, 01:11:00 AM
You can use recursive algorithm, I shared my some codes in General Discussion of forum , I hope it can help you!


Title: Re: Get parent node!!
Post by: patana on January 05, 2013, 09:37:21 PM
Could you please kindly provide a link so it'd be much easier for the owner or passer-by!!!


Title: Re: Get parent node!!
Post by: nyr_jack on January 05, 2013, 10:46:51 PM
http://www.jeasyui.com/forum/index.php?topic=1047.0

Please try it , maybe can help you!


Title: Re: Get parent node!!
Post by: varonica on January 08, 2013, 02:58:24 AM
Thanks guys, I love you!!!  :-* :-* :-* :-* :-* :-* :-*


Title: Re: Get parent node!!
Post by: varonica on January 11, 2013, 08:16:30 PM
Hi nyr_jack, your function is really helpful but unluckily i still don't understand some param that were used in getParentArray(). Could you kindly provide an example ? :(
Code:
/**
 * 获得该节点的所有父节点数组(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);
   }
}
I just want to get all the parent of node we selected. Please help me :( :'(


Title: Re: Get parent node!!
Post by: varonica on January 11, 2013, 08:24:05 PM
Anybody Please Help!!!!  :'( :'( :'( :'(


Title: Re: Get parent node!!
Post by: nyr_jack on January 12, 2013, 06:13:32 AM
I wrote a sample, you can only select one node, and when you click button you can get all parents of this seleced node. bellow the main code:

html:

<!-- This button's 'onclick' function need a param, this param specify the tree id -->
<a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-ok'" onclick='getAllParentsOfNode("#tree")'>Get all parents of node</a>
<br><br><br>
<ul id="tree" class="easyui-tree" data-options="url:'tree_data1.json',animate:true,checkbox:false"></ul>

javascript:

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

/**
 * to get a array of parents of selected node
 * @param tree - the tree you want to select a node
 * @param selectedNode - the node that you select
 * @param nodeLevel - the level of selected node
 * @param nodeparentArry - use a array to record all parents of selected node
 * @returns
 */
function getParentArry(tree,selectedNode,nodeLevel,parentArry){
   //end condition: level of selected node equals 1, means it's root
   if(nodeLevel == 1){
      return parentArry;
   }else{//if selected node isn't root
      nodeLevel -= 1;
      //the parent of the node
      var parent = $(tree).tree('getParent',selectedNode.target);
      //record the parent of selected to a array
      parentArry.unshift(parent);
      //recursive, to judge whether parent of selected node has more parent
      return getParentArry(tree,parent,nodeLevel,parentArry);
   }
}

function getAllParentsOfNode(tree){   
   var node = $(tree).tree('getSelected');
   alert("The selected node is: " + node.text);
   var nodeLevel = $(tree).tree('getLevel',node.target);
   var parentArry = new Array();
   var parents = getParentArry(tree,node,nodeLevel,parentArry);
   if(parents.length > 0){
      var parentStr = "";
      for(var i = 0; i < parents.length; i++){
         parentStr += parents.text + " -> ";
      }
   }
   alert("All parents of selected node:\n" + parentStr);
}


Title: Re: Get parent node!!
Post by: varonica on July 03, 2013, 02:41:42 AM
Thanks nyr_jack, Your function works great, but there's a tiny mistake in it.
Code:
function getAllParentsOfNode(tree){   
   var node = $(tree).tree('getSelected');
   alert("The selected node is: " + node.text);
   var nodeLevel = $(tree).tree('getLevel',node.target);
   var parentArry = new Array();
   var parents = getParentArry(tree,node,nodeLevel,parentArry);
   if(parents.length > 0){
      var parentStr = "";
      for(var i = 0; i < parents.length; i++){
         parentStr += parents[i].text + " -> "; // after modify parents[i] it works :)
      }
   }
   alert("All parents of selected node:\n" + parentStr);
}