js中实现无限层级的树形结构(类似递归)

这个是后台管理的动态创建的菜单,比较难,不过,仔细揣摩还是比较简单的,所以,直接上代码。

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<div id="div"></div>
	<script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
	<script type="text/javascript">

var zNodes=[

    {code:0,pId:-1,name:"Aaaa"},
	{code:1,pId:0,name:"主页"},
	{code:11,pId:1,name:"A1"},
	{code:111,pId:11,name:"A11"},
	{code:12,pId:1,name:"A2"},
	{code:13,pId:1,name:"A3"},
	{code:2,pId:0,name:"文章管理"},
	{code:21,pId:2,name:"用户管理"},
	{code:22,pId:2,name:"角色管理"},
	{code:23,pId:2,name:"权限管理"},
	{code:3,pId:0,name:"C"},
	{code:31,pId:3,name:"C1"},
	{code:32,pId:3,name:"C2"},
	{code:33,pId:3,name:"C3"},
	{code:34,pId:31,name:"x"},
	{code:35,pId:31,name:"y"},
	{code:36,pId:31,name:"z"},
	{code:37,pId:36,name:"z1123"},
	{code:38,pId:37,name:"z123123123"},
	{code:381,pId:38,name:"z1231231234"},
];
function treeMenu(a){
	  this.tree=a||[];
	  this.groups={};
};
treeMenu.prototype={
	init:function(pid){
		 this.group();
		return this.getDom(this.groups[pid]);

    },
	group:function(){
		for(var i=0;i<this.tree.length;i++){
			 if(this.groups[this.tree[i].pId]){
				//console.log(this.groups[this.tree[i].pId]);
				this.groups[this.tree[i].pId].push(this.tree[i]);
			}else{
				this.groups[this.tree[i].pId]=[];
				this.groups[this.tree[i].pId].push(this.tree[i]);
				console.log(this.groups[this.tree[i].pId]);
			}
		}

    },

    getDom:function(a){
			if(!a){return ‘‘}
			var html=‘\n<ul >\n‘;
			for(var i=0;i<a.length;i++){
				html+=‘<li><span>‘+a[i].name+‘</span>‘;
				//html+=‘<li><a href="#">‘+a[i].name+‘</a>‘;
           	 	html+=this.getDom(this.groups[a[i].code]);
				html+=‘</li>\n‘;

        };

        html+=‘</ul>\n‘;

        return html;
	}
};
	var html=new treeMenu(zNodes).init(0);
	$("#div").html(html);
	</script>
</body>
</html>

  配上这张图看代码的话,可能更加好理解这段代码。

下面这一种和前一种的区别就是他们的数据结构不一样,导致实现代码的逻辑也不一样。不过,下面这一种方式复杂的工作全部交给了后台,基本上没有前端什么事情了。

有兴趣的童鞋可以到我的微信公众号里面查看

代码地址,我放这儿了:

https://mp.weixin.qq.com/s/ccgTHxpZoY2mMq8-Pmgtuw

原文地址:https://www.cnblogs.com/myprogramer/p/10303275.html

时间: 2024-10-09 10:36:05

js中实现无限层级的树形结构(类似递归)的相关文章

java、js中实现无限层级的树形结构(类似递归)

js中: var zNodes=[{id:0,pId:-1,name:"Aaaa"},    {id:1,pId:0,name:"A"},    {id:11,pId:1,name:"A1"},    {id:12,pId:1,name:"A2"},    {id:13,pId:1,name:"A3"},    {id:2,pId:0,name:"B"},    {id:21,pId:2

【转】简单了介绍js中的一些概念(词法结构) 和 数据类型(部分)。

1 , javascript字符集: javascript采用的是Unicode字符集编码. 为什么要采用这个编码呢? 原因很简单,16位的Unicode编码可以表示地球人的任何书面语言.这是语言 国际化的一个重要特征.(大家也许见过用中文写脚本,比如:function 我的函数() {} ); Javascript中每个字符都是用2个字节表示的.(因为是16位编码) 2 ,大小写敏感: js是一种区分大小写的语言. 注意下:以前我也犯过的错误. HTML是不区分大小写的.经常看见有人这么写, 

Delphi中根据分类数据生成树形结构的最优方法

一. 引言:    TreeView控件适合于表示具有多层次关系的数据.它以简洁的界面,表现形式清晰.形象,操作简单而深受用户喜爱.而且用它可以实现ListView.ListBox所无法实现的很多功能,因而受到广大程序员的青睐.    树形结构在Windows环境中被普遍应用,但在数据库开发中面对层次多.结构复杂的数据,如何快速构造树形目录并实现导航呢?    二. 实现关键技术:    在Delphi提供的控件中包含了TreeView控件,但树的具体形成还需要用户编写代码.即它的列表项要在程序

Django中使用Bootstrap展示树形结构

概述 在企业管理系统中,经常会有树形结构需求,例如:组织结构.权限等等,本文使用Django和Bootstrap Tree View来展示企业组织结构和对应组织的人员. 实现 模型类(models.py) class Department(models.Model): name = models.CharField(u'单位名称', max_length=30) pri = models.IntegerField(u'序号') desc = models.CharField(u'备注', max

在NLP中深度学习模型何时需要树形结构?

前段时间阅读了Jiwei Li等人[1]在EMNLP2015上发表的论文<When Are Tree Structures Necessary for Deep Learning of Representations?>,该文主要对比了基于树形结构的递归神经网络(Recursive neural network)和基于序列结构的循环神经网络(Recurrent neural network),在4类NLP任务上进行实验,来讨论深度学习模型何时需要树形结构.下面我将通过分享这篇论文以及查看的一些

salesforce 零基础学习(七十)使用jquery tree实现树形结构模式

项目中UI需要用到树形结构显示内容,后来尽管不需要做了,不过还是自己做着玩玩,mark一下,免得以后项目中用到. 实现树形结构在此使用的是jquery的dynatree.js.关于dynatree的使用可以参考:http://wwwendt.de/tech/dynatree/doc/dynatree-doc.html#h4.2 对于树形结构,这里不做太多介绍,树一般需要一个根节点,根节点下面可以有很多子节点或者叶子节点,子结点也可以包含叶子结点或者子节点.我们在设计表结构的时候可以考虑自连接操作

树形结构的数据库的存储

程序设计过程中,我们常常用树形结构来表征某些数据的关联关系,如企业上下级部门.栏目结构.商品分类等等,通常而言,这些树状结构需要借助于数据库完成持久化.理想中树形结构应该具备如下特征:数据存储冗余度小.直观性强:检索遍历过程简单高效:节点增删改查CRUD操作高效. 列举了一个食品族谱的例子进行讲解,通过类别.颜色和品种组织食品,树形结构图如下: 1,对树形结构最直观的分析莫过于节点之间的继承关系上,通过显示地描述某一节点的父节点,从而能够建立二维的关系表,则这种方案的Tree表结构通常设计为:{

从零开始的JS生活(二)——BOM、DOM与JS中的事件

上回书说道,JS中变量.运算符.分支结构.循环和嵌套循环等内容.本回就由本K给大伙唠唠JS中的BOM.DOM和事件. 一."花心大萝卜"--BOM 1.震惊,FFF团为何对BOM举起了火把--BOM简介 BOM(Browser Object Model) 是指浏览器对象模型,在JS中BOM是个不折不扣的花心大萝卜,因为它有很多个对象,其中代表浏览器窗口的Window对象是BOM的"正室".也就是最重要的,其他对象都是正室的下手.或者叫侧室也不足为过. 2.细数BOM

树形结构的数据库表Schema设计-基于左右值编码

树形结构的数据库表Schema设计 程序设计过程中,我们常常用树形结构来表征某些数据的关联关系,如企业上下级部门.栏目结构.商品分类等等,通常而言,这些树状结构需要借助于数据库完 成持久化.然而目前的各种基于关系的数据库,都是以二维表的形式记录存储数据信息,因此是不能直接将Tree存入DBMS,设计合适的Schema及其对 应的CRUD算法是实现关系型数据库中存储树形结构的关键. 理想中树形结构应该具备如下特征:数据存储冗余度小.直观性强:检索遍历过程简单高效:节点增删改查CRUD操作高效.无意