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[i];
		
		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[i];
		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[0];
		findindex = arr[1];
		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;
				else
					node = 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;
};

你可能感兴趣的:(C++,c,算法,ext,C#)