`
Merrygrass
  • 浏览: 166760 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

递归无限级树下拉菜单

阅读更多

项目中需要用到无限级树型下拉菜单,花时间折腾了一下。在此记录下来以备后用!

效果图:


	/**
	  *树形菜单VO
	  */
	public class SelectTree implements Serializable{
		private int id;
		private String name;
		private List<SelectTree> child = new ArrayList<SelectTree>();
                //getter & setter ....略
	}

 

代码片段:

	/**
	 * 构建树型菜单数据
	 */
	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代码:

	//recursive tree node
	function buildNode(len,data){
		var prefix = "|";
		for(var i=0;i<len;i++){
			prefix += "-";
		}
		$.each(data,function(i,item){
			if(0 < item.child.length){
				$('#typeid').append("<option value="+item.id +">" + prefix + item.name + "</option>");
				buildNode(len+1,item.child);
			}else{
				$('#typeid').append("<option value="+item.id +">" + prefix + item.name + "</option>");
			}
		});
	}
	
	$.ajax({
		url:'${base}/channel/channelAction!queryChannelList.action',
		type:'GET',
		dataType:'json',
		contentType:'application/json',
		success:function(json){
			if(json.success){
				$('#typeid').empty();
				$('#typeid').append("<option value='0'>请选择栏目...</option>");
				$.each(json.data,function(i,item){
					if(null == item.parentId){
						$('#typeid').append("<option value="+item.id +">" + item.name + "</option>");
						buildNode(1,item.child);
					}
				});
			}
		},
		error:function(){
			alert("加载栏目出错!");
		}
	});
	
});
 
  • 大小: 3.4 KB
1
3
分享到:
评论

相关推荐

    treeview递归无限级树形菜单(递归方式)

    本文将详细讲解如何使用递归方法创建一个无限级的树形菜单,特别适合初学者掌握。 首先,我们要理解树形菜单的基本概念。树形菜单是由节点(节点通常代表一个菜单项)组成的,每个节点可以有零个或多个子节点,形成...

    asp递归无限级分类(含数据库)

    在ASP(Active Server Pages)开发中,经常需要处理树形结构的数据,如网站导航菜单、组织结构等,这时就会用到无限级分类的技术。本文将详细介绍如何在ASP中实现递归无限级分类,并结合数据库进行操作。 首先,...

    ASP递归无限级分类源码

    本文将深入探讨ASP(Active Server Pages)中如何使用递归算法实现无限级分类。 首先,我们需要理解无限级分类的概念。无限级分类是指一个类别可以有任意多级别的子类,形成一个层次结构。例如,商品分类中可以有...

    不用递归实现的无限级树型菜单

    本主题介绍了一种不依赖递归的高效方法来创建无限级树型菜单,具有快速加载的特点。 首先,我们来看`WriteXML.ashx`,这是一个HTTP Handler,可能用于动态生成XML数据。在不使用递归的情况下,我们可以利用迭代的...

    递归实现的无限级下拉式菜单

    "递归实现的无限级下拉式菜单"是一种常见的设计模式,尤其适用于网站导航,它允许用户通过点击主菜单项来展开各级子菜单,从而方便地访问深层次的页面结构。这种设计能够有效地组织大量层次分明的数据,使得用户能...

    无限级树形菜单(Sql数据库)_.NET GUI控件.7z

    当我们谈论“无限级树形菜单”,这通常是指一个可以展示层级结构数据的控件,例如文件系统、组织架构或数据库中的分类数据。在这个场景中,这个压缩包文件提供了使用.NET GUI控件来实现与Sql数据库交互的无限级树形...

    无限级树形菜单(支持多选)

    综上所述,无限级树形菜单的实现涉及数据结构、递归算法、前端渲染、用户交互等多个方面,而多选功能的加入则增加了菜单的实用性。理解和掌握这些知识点,对于开发高效、友好的用户界面至关重要。在“MyApplication2...

    无限级树型选择菜单

    无限级树型选择菜单是一种常见的UI设计模式,尤其在数据层级结构复杂且需要用户进行逐级选择的情况下。这种菜单能够以图形化的方式呈现数据的层级关系,用户可以通过展开、折叠节点来浏览和选择不同级别的选项。在IT...

    jQuery手机端无限级导航下拉菜单代码

    如果菜单项有无限级的子菜单,那么这个过程将递归地应用于每一个子菜单项。 图片资源(img文件夹)可能是用于装饰菜单的图标,例如展开/折叠箭头,或者菜单背景等。这些图像可以增强用户体验,使导航更加直观。 ...

    s2sh+freemarker+jquery+jquery-treeview 无限级树形菜单.rar

    在IT行业中,构建一个无限级树形菜单是常见的需求,特别是在Web应用中,用于组织和展示层次结构的数据。本项目“s2sh+freemarker+jquery+jquery-treeview 无限级树形菜单”就是这样一个解决方案,它整合了多种技术来...

    纯ajax 无限级 树形 菜单 源码+.rar

    无限级表示这个菜单可以处理任意深度的层次结构,意味着它可以递归地加载和显示子节点,直到所有级别的节点都被展示出来。这对于处理具有复杂层次关系的数据集非常有用。 树形菜单是数据呈现的一种方式,以节点和边...

    js无限级树形菜单js无限级树形菜单js无限级树形菜单

    综上所述,实现JS无限级树形菜单涉及到了数据结构的设计、递归遍历、DOM操作、事件处理、性能优化等多个方面。通过合理的设计和编程实践,我们可以构建出功能丰富且用户体验良好的树形菜单。在实际项目中,结合具体...

    CSS+js无限级折叠导航菜单

    通过递归函数,可以处理任意级别的子菜单,实现真正的无限级分类。此外,JavaScript还可以用来添加其他交互特性,如懒加载子菜单内容、动画效果等,提升用户体验。 压缩包中的两个示例分别展示了横向和竖向的菜单...

    无限级树形菜单(Sql数据库).zip

    无限级树形菜单在IT行业中通常用于网站导航、组织结构展示、文件目录管理等多种场景,尤其是在数据层级关系复杂的情况下。这种菜单结构允许用户以清晰、直观的方式浏览和操作具有嵌套关系的数据。在SQL数据库中实现...

    无限级 树形菜单 动态生成

    在无限级树形菜单的实现中,Sql2000可能用于存储菜单的层级结构和相关数据,通过数据库查询语句(如递归查询)获取并构建菜单树。 无限级树形菜单的实现通常涉及以下几个关键知识点: 1. 数据库设计:菜单结构通常...

    无限级左侧CSS菜单

    在实际应用中,为了实现无限级菜单,我们需要使用递归的概念。即,如果某个菜单项还有子菜单,那么它的子菜单项也可以包含子菜单,以此类推。这可以通过JavaScript或服务器端动态生成HTML来实现,但基础的样式布局仍...

    无限级树形菜单(Sql数据库)

    在IT领域,尤其是在Web开发中,无限级树形菜单是一种常见的数据结构,它用于构建具有层级关系的导航系统。在本场景中,我们关注的是如何在Sql数据库中存储和操作这种菜单结构。Sql数据库,如MySQL、SQL Server或...

    动态实现无限级树形菜单

    在IT领域,尤其是在Web开发中,动态实现无限级树形菜单是一项常见的需求。这主要用于构建层级结构明显的导航系统,如网站菜单、组织架构、文件目录等。无限级树形菜单意味着菜单可以有任意多的子级,且在运行时能够...

    jquery无限级树形菜单源码 v1.0-源码.zip

    首先,无限级树形菜单的核心思想是递归。在JavaScript中,递归是一种强大的编程技巧,通过函数调用自身来处理具有相同结构的问题。在构建无限级树形菜单时,递归可以帮助我们处理任意深度的子节点。具体到jQuery,...

Global site tag (gtag.js) - Google Analytics