flex----遍历树Tree,根据输入的名称搜索树节点,并展示该节点

1.Tree的dataProvider为ArrayCollection:treeData

<mx:VBox width="30%" height="100%" >
	<mx:Label text="选择某节点:" textAlign="center" fontWeight="bold" width="100%"/>
	<!--搜索功能布局框-->
	<mx:HBox  width="100%" height="5%">
		<mx:TextInput  id="findLeft" keyDown="preActSearch(event)"  text="{myTree.selectedItem.menuName}" width="90%"/>
		<mx:Button id="find1Button" label="搜 索"  fontWeight="bold" cornerRadius="5" right="0" fillColors="#3C80CA"  click="searchActivityType()"/>
	</mx:HBox>
	<mx:Tree id="myTree" width="100%" height="90%" labelField="menuName"
		showRoot="false" dataProvider="{treeData}" itemClick="myTree_itemClickHandler(event)"/>
</mx:VBox>


2.定义函数:

//搜索输入框的回车键事件
			private function preActSearch(event:KeyboardEvent):void
			{
				if(event.keyCode==13)
				{
					searchActivityType();
				}
			}
			
			//搜索节点
			private function searchActivityType():void
			{
				var type:String  = findLeft.text;
				var activities:String = null;
				if(type==null || type.length==0)
				{
					Alert.show("请输入节点名称","错误");
					return;
				}
				var items:Array = new Array();
				var pitems:Array = new Array();
				var node:Object;
				var nodes:ArrayCollection = myTree.dataProvider as ArrayCollection;
				var index:int = 0;				
				while(index<nodes.length)
				{
					node = nodes[index];
					recursionSearchWithJSON(null,node,type,items,pitems);					
					index++;
				}	
				for(var i:int =0;i<pitems.length;i++)
				{					
					myTree.expandChildrenOf(pitems[i],true);
				}	
				
				if(items!=null && items.length>0)
				{
					myTree.selectedItem = items[0];								
					myTree.scrollToIndex(myTree.selectedIndex);
				}
				
				myTree.selectedItems=items;
				
			}	
			
			

                          //标志大的树节点是否遍历完毕
			var temp:Array = new Array();
			var flag:Boolean = false;
			private function recursionSearchWithJSON(parentNode:*,node:Object,type:String,items:Array,pitems:Array):void
			{				
				var label:String;
				var arrNode:ArrayCollection;
				var pnode:*;
				
				if(parentNode==null)
				{
					temp = new Array();
					flag = false;					
				}
				else
				{
					temp.push(parentNode);
				}				
				//描述
				label = node.menuName;
				if(label!=null && label.indexOf(type)!=-1)
				{
					flag = true;
					items.push(node);					
				}
				//这里不能加else,不然不能遍历当前节点对子节点
				if(myTree.dataDescriptor.isBranch(node))
				{	
					if(node.hasOwnProperty("children"))
					{
						arrNode = node.children as ArrayCollection;
						for(var i:int=0;i<arrNode.length;i++)
						{
							recursionSearchWithJSON(node,arrNode[i],type,items,pitems);
						}						
					}											
				}
				
				if(flag)
				{
					for(var i=0;i<temp.length;i++)
					{
						pitems.push(temp[i]);
					}
					temp = new Array();
					flag = false;
				}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值