zoukankan      html  css  js  c++  java
  • 递归无限级树下拉菜单

    Java代码  
    1. /**  
    2.   *树形菜单VO  
    3.   */  
    4.  public class SelectTree implements Serializable{   
    5.     private int id;   
    6.     private String name;   
    7.     private List<SelectTree> child = new ArrayList<SelectTree>();   
    8.                //getter & setter ....略   
    9. }  
    	/**
    	  *树形菜单VO
    	  */
    	public class SelectTree implements Serializable{
    		private int id;
    		private String name;
    		private List<SelectTree> child = new ArrayList<SelectTree>();
                    //getter & setter ....略
    	}
    

    代码片段:

    Java代码  
    1. /**  
    2.  * 构建树型菜单数据  
    3.  */  
    4. public List<SelectTree> buildNode(int pid,List<YcChannel> channels){   
    5.     List<SelectTree> result = new ArrayList<SelectTree>();   
    6.     for(YcChannel chl:channels){   
    7.         SelectTree node = new SelectTree();   
    8.         if(null != chl.getParentId() && chl.getParentId().equals(pid)){   
    9.             node.setId(chl.getChannelId());   
    10.             node.setName(chl.getName());   
    11.             List<SelectTree> children = buildNode(chl.getChannelId(),channels);   
    12.             if(null != children && 0 < children.size()){   
    13.                 node.setChild(children);   
    14.             }   
    15.             result.add(node);    
    16.         }   
    17.     }   
    18.     return result;   
    19. }   
    20.   
    21. public String queryChannelList() {   
    22.     ycChannelList = this.channelSer.queryChannelList();   
    23.     List<SelectTree> trees = new ArrayList<SelectTree>();   
    24.     for(YcChannel yc:ycChannelList){   
    25.         if(null == yc.getParentId()){   
    26.             SelectTree t = new SelectTree();   
    27.             t.setId(yc.getChannelId());   
    28.             t.setName(yc.getName());   
    29.             t.setChild(buildNode(t.getId(),ycChannelList));   
    30.             trees.add(t);   
    31.         }   
    32.     }   
    33.     this.setAjaxData(trees);   
    34.     return AJAX_DATA;   
    35. }  
    	/**
    	 * 构建树型菜单数据
    	 */
    	public List<SelectTree> buildNode(int pid,List<YcChannel> channels){
    		List<SelectTree> result = new ArrayList<SelectTree>();
    		for(YcChannel chl:channels){
    			SelectTree node = new SelectTree();
    			if(null != chl.getParentId() && chl.getParentId().equals(pid)){
    				node.setId(chl.getChannelId());
    				node.setName(chl.getName());
    				List<SelectTree> children = buildNode(chl.getChannelId(),channels);
    				if(null != children && 0 < children.size()){
    					node.setChild(children);
    				}
    				result.add(node); 
    			}
    		}
    		return result;
    	}
    	
    	public String queryChannelList() {
    		ycChannelList = this.channelSer.queryChannelList();
    		List<SelectTree> trees = new ArrayList<SelectTree>();
    		for(YcChannel yc:ycChannelList){
    			if(null == yc.getParentId()){
    				SelectTree t = new SelectTree();
    				t.setId(yc.getChannelId());
    				t.setName(yc.getName());
    				t.setChild(buildNode(t.getId(),ycChannelList));
    				trees.add(t);
    			}
    		}
    		this.setAjaxData(trees);
    		return AJAX_DATA;
    	}
    

    前端JS代码:

    Js代码  
    1.     //recursive tree node   
    2.     function buildNode(len,data){   
    3.         var prefix = "|";   
    4.         for(var i=0;i<len;i++){   
    5.             prefix += "-";   
    6.         }   
    7.         $.each(data,function(i,item){   
    8.             if(0 < item.child.length){   
    9.                 $('#typeid').append("<option value="+item.id +">" + prefix + item.name + "</option>");   
    10.                 buildNode(len+1,item.child);   
    11.             }else{   
    12.                 $('#typeid').append("<option value="+item.id +">" + prefix + item.name + "</option>");   
    13.             }   
    14.         });   
    15.     }   
    16.        
    17.     $.ajax({   
    18.         url:'${base}/channel/channelAction!queryChannelList.action',   
    19.         type:'GET',   
    20.         dataType:'json',   
    21.         contentType:'application/json',   
    22.         success:function(json){   
    23.             if(json.success){   
    24.                 $('#typeid').empty();   
    25.                 $('#typeid').append("<option value='0'>请选择栏目...</option>");   
    26.                 $.each(json.data,function(i,item){   
    27.                     if(null == item.parentId){   
    28.                         $('#typeid').append("<option value="+item.id +">" + item.name + "</option>");   
    29.                         buildNode(1,item.child);   
    30.                     }   
    31.                 });   
    32.             }   
    33.         },   
    34.         error:function(){   
    35.             alert("加载栏目出错!");   
    36.         }   
    37.     });   
    38.        
    39. });  
  • 相关阅读:
    Vue中使用clipboard实现复制功能
    在 Window 关闭时,无法将 Visibility 设置为 Visible,也无法调用 Show、ShowDialog、Close 或 WindowInteropHelper.EnsureHandle。
    iTextSharp 给PDF添加水印
    VS2017登录账户提示升级Edge浏览器的问题
    vue表单中,自动过滤前后空字符,再也不用正则表达式了
    vue中 axios的封装
    vue中 axios的封装
    js实现身份证、手机号加密,加密类型为*
    web前端,传统的jquery与vue结合,开发应用
    推荐系统入门笔记1---基于内容推荐的基础架构
  • 原文地址:https://www.cnblogs.com/liyuxin/p/2101855.html
Copyright © 2011-2022 走看看