xymeng0626 发表于 2013-2-5 01:24:04

EXT tree 连续定位树节点

一:根据树代码定位树某个节点
调用处
var tree = Ext.getCmp('selecttree');var rootNode = tree.getRootNode();//vulue是动态输入的需要定位的代码focusTreeNodeFunc(rootNode,value);按代码严格定位

实现方法
/*** 递归算法定位树节点*/function focusTreeNodeFunc(node,value,focusFlag){for (var i = 0; i < node.childNodes.length; i++) {var subNode = node.childNodes;var text = '';if (focusFlag == 'code')text = subNode.id;else if (focusFlag == 'name')text = subNode.text;if (text == value){var nodeArr = new Array();getNeedExpandNode(subNode,nodeArr);doNeedExpandNode(nodeArr);if (subNode.hasChildNodes())subNode.expand();subNode.select();subNode.getUI().getEl().scrollIntoView();break;}else{if (subNode.hasChildNodes()){focusTreeNodeFunc(subNode,value,focusFlag);}}}}/** * XDY * 获取所有需要展开的父节点。 * @param curNode * @param nodeArr * @return */function getNeedExpandNode(curNode,nodeArr){var parentNode;if (curNode.parentNode != undefined && curNode.parentNode!=null){if ((curNode.parentNode.isExpanded() ==false) && (curNode.parentNode.hasChildNodes())){parentNode = curNode.parentNode;if (parentNode.text != '##')nodeArr.push(parentNode);}}//递归获取所有的上级节点if ((parentNode != undefined) && (parentNode.parentNode.text != '##'))getNeedExpandNode(parentNode,nodeArr);}/** * XDY * 展开需要的所有父节点 * @param nodeArr * @return */function doNeedExpandNode(nodeArr){//展开的时候只能从上往下逐级展开,所以倒序循环for(var i=nodeArr.length-1;i >=0;i--){var needExpandNode = nodeArr;needExpandNode.expand();}}

二:根据树名称连续定位
调用处
function nextClickFunc(focusCombobox,uuid){var comboboxValue = focusCombobox.value;var value = Ext.getCmp(uuid).getValue();if (isEmpty(value)) return;var tree = Ext.getCmp('selecttree');var rootNode = tree.getRootNode();var arr = focusTreeNodeByFuzzy(rootNode,value,findindex,comboboxValue);//模糊定位if(arr!=null){var node = arr;findindex = arr;if(node!=null){var nodeArr = new Array();getNeedExpandNode(node,nodeArr);doNeedExpandNode(nodeArr);if (node.hasChildNodes())node.expand();node.select();node.getUI().getEl().scrollIntoView();}}}

实现方法
/** * 模糊定位树节点 * @param node * @param name * @param index * @return */var findindex = 0;function focusTreeNodeByFuzzy(node,name,index,focusFlag){var arr = new Array();var c = -1;while(node){c++;var temp=node;var showName = '';if (focusFlag == 'code')showName = node.id;else if (focusFlag =='name')showName = node.text;if(showName.indexOf(name)<0 || c<=index){if (!node.lastChild){if (node.nextSibling)node = node.nextSibling;else if (!node.nextSibling && node.parentNode)node = node.parentNode.nextSibling;elsenode = node.nextSibling;}else{node = node.firstChild;} if(!node){node=temp;while(node.parentNode && node.parentNode.parentNode && !node.nextSibling){node=node.parentNode;}node=node.nextSibling;}}else{arr.push(node);arr.push(c);return arr;}}return null;};
页: [1]
查看完整版本: EXT tree 连续定位树节点