项目中需要用到无限级树型下拉菜单,花时间折腾了一下。在此记录下来以备后用!
效果图:
/**
*树形菜单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
分享到:
相关推荐
本文将详细讲解如何使用递归方法创建一个无限级的树形菜单,特别适合初学者掌握。 首先,我们要理解树形菜单的基本概念。树形菜单是由节点(节点通常代表一个菜单项)组成的,每个节点可以有零个或多个子节点,形成...
在ASP(Active Server Pages)开发中,经常需要处理树形结构的数据,如网站导航菜单、组织结构等,这时就会用到无限级分类的技术。本文将详细介绍如何在ASP中实现递归无限级分类,并结合数据库进行操作。 首先,...
本文将深入探讨ASP(Active Server Pages)中如何使用递归算法实现无限级分类。 首先,我们需要理解无限级分类的概念。无限级分类是指一个类别可以有任意多级别的子类,形成一个层次结构。例如,商品分类中可以有...
本主题介绍了一种不依赖递归的高效方法来创建无限级树型菜单,具有快速加载的特点。 首先,我们来看`WriteXML.ashx`,这是一个HTTP Handler,可能用于动态生成XML数据。在不使用递归的情况下,我们可以利用迭代的...
"递归实现的无限级下拉式菜单"是一种常见的设计模式,尤其适用于网站导航,它允许用户通过点击主菜单项来展开各级子菜单,从而方便地访问深层次的页面结构。这种设计能够有效地组织大量层次分明的数据,使得用户能...
当我们谈论“无限级树形菜单”,这通常是指一个可以展示层级结构数据的控件,例如文件系统、组织架构或数据库中的分类数据。在这个场景中,这个压缩包文件提供了使用.NET GUI控件来实现与Sql数据库交互的无限级树形...
综上所述,无限级树形菜单的实现涉及数据结构、递归算法、前端渲染、用户交互等多个方面,而多选功能的加入则增加了菜单的实用性。理解和掌握这些知识点,对于开发高效、友好的用户界面至关重要。在“MyApplication2...
无限级树型选择菜单是一种常见的UI设计模式,尤其在数据层级结构复杂且需要用户进行逐级选择的情况下。这种菜单能够以图形化的方式呈现数据的层级关系,用户可以通过展开、折叠节点来浏览和选择不同级别的选项。在IT...
如果菜单项有无限级的子菜单,那么这个过程将递归地应用于每一个子菜单项。 图片资源(img文件夹)可能是用于装饰菜单的图标,例如展开/折叠箭头,或者菜单背景等。这些图像可以增强用户体验,使导航更加直观。 ...
在IT行业中,构建一个无限级树形菜单是常见的需求,特别是在Web应用中,用于组织和展示层次结构的数据。本项目“s2sh+freemarker+jquery+jquery-treeview 无限级树形菜单”就是这样一个解决方案,它整合了多种技术来...
无限级表示这个菜单可以处理任意深度的层次结构,意味着它可以递归地加载和显示子节点,直到所有级别的节点都被展示出来。这对于处理具有复杂层次关系的数据集非常有用。 树形菜单是数据呈现的一种方式,以节点和边...
综上所述,实现JS无限级树形菜单涉及到了数据结构的设计、递归遍历、DOM操作、事件处理、性能优化等多个方面。通过合理的设计和编程实践,我们可以构建出功能丰富且用户体验良好的树形菜单。在实际项目中,结合具体...
通过递归函数,可以处理任意级别的子菜单,实现真正的无限级分类。此外,JavaScript还可以用来添加其他交互特性,如懒加载子菜单内容、动画效果等,提升用户体验。 压缩包中的两个示例分别展示了横向和竖向的菜单...
无限级树形菜单在IT行业中通常用于网站导航、组织结构展示、文件目录管理等多种场景,尤其是在数据层级关系复杂的情况下。这种菜单结构允许用户以清晰、直观的方式浏览和操作具有嵌套关系的数据。在SQL数据库中实现...
在无限级树形菜单的实现中,Sql2000可能用于存储菜单的层级结构和相关数据,通过数据库查询语句(如递归查询)获取并构建菜单树。 无限级树形菜单的实现通常涉及以下几个关键知识点: 1. 数据库设计:菜单结构通常...
在实际应用中,为了实现无限级菜单,我们需要使用递归的概念。即,如果某个菜单项还有子菜单,那么它的子菜单项也可以包含子菜单,以此类推。这可以通过JavaScript或服务器端动态生成HTML来实现,但基础的样式布局仍...
在IT领域,尤其是在Web开发中,无限级树形菜单是一种常见的数据结构,它用于构建具有层级关系的导航系统。在本场景中,我们关注的是如何在Sql数据库中存储和操作这种菜单结构。Sql数据库,如MySQL、SQL Server或...
在IT领域,尤其是在Web开发中,动态实现无限级树形菜单是一项常见的需求。这主要用于构建层级结构明显的导航系统,如网站菜单、组织架构、文件目录等。无限级树形菜单意味着菜单可以有任意多的子级,且在运行时能够...
首先,无限级树形菜单的核心思想是递归。在JavaScript中,递归是一种强大的编程技巧,通过函数调用自身来处理具有相同结构的问题。在构建无限级树形菜单时,递归可以帮助我们处理任意深度的子节点。具体到jQuery,...