根据数据渲染DOM树形菜单,这个需求做了几天了。一开始觉得用while也可以实现一层一层查找数据,但后来发现while还是做不到,因为我查找这个动作必须有进入有出来然后进入下一个条目,但while只能进去再出来就得靠一些进去前写的一些变量,比如什么oldMenu,但根据数据来渲染的,我们不可能每次都知道数据有几层,每层又有几个子层,子层又有几个子层,我们不可能为这些数据“私人订制”while的嵌套层数,所以还是用递归实现。虽然说递归会占用内存,但目前我的能力只能想到用递归来实现,至于为什么给汽车做的内嵌系统不能用递归,这个以后再了解( 一个新闻上看到的http://www.sohu.com/a/75155172_156793 )。

数据的格式

var json = {

    t1:{
h2:'第一级菜单',
t1:{
h2:'第二级菜单',
t1:{
h2:'第三级菜单1',
t1:{
h2:'第四级菜单',
}
},
t2:{
h2:'第三级菜单2',
},
t3:{
h2:'第三级菜单3',
},
},
}, }

首先数据不允许裸在json的第一层括号里,其次,每个数据都必须有它的标题  --->   【标题+子集】,这样的格式。

递归用法:每进入一个集合都要个这一层的集合缩进。进入就是进入递归,调用一遍自己。

用递归做也是困难重重,首先就是怎样控制缩进,开始没想到后来想到了其实也非常简单,既然进入了要缩进,那进入完事后出来就要把缩进恢复,具体在代码上就是,进入一次递归 i++ ,结束本次递归 i-- ,这样就实现了。

然后就是怎样让这个函数只用传进一个格式正确的数据,返回一个嵌套关系正确的DOM结构,这一步实现比较简单,就return出来就行了。

总结:做到这里,逐渐发现js的高深之处,就是数据和DOM的配合使用,让我再一次想到那个词 “数据驱动视图” , 这里的数据应该就是想    

  【从各种渠道获取到的数据转换成json  --->   格式化json   --->    将格式化的json传入到实现写好的DOM生成函数】

回到我刚刚写的这个根据数据生成DOM树形菜单,假如我加入一个新需求,根据用户添加更新树形菜单,这是不是跟 “数据驱动视图” 有点沾边呢?( 我觉得这个需求再妙味后面的教学里马上就会出现 )。想到这里,才觉得React可能不是一般的难学,是变态难学,而我的学习计划表上,可能要加入一个新的条目:数据结构。

根据数据渲染DOM树形菜单——中途感想的更多相关文章

  1. 议:如何将树形菜单形式的数据转化成HTML的二维表(相同内容需合并单元格)

    一般做OA类管理系统,经常涉及到“组织架构”的概念,那么像这种有上下层级关系的数据一般会做成树形菜单的方式显示,底层代码必定会用到递归算法.这篇随笔的目的就是要谈谈除了用树形菜单来显示这种上下层级关系 ...

  2. JS树形菜单

    超全的JS树形菜单源代码共享(有实例图) 树形菜单是很常用的效果,常用在管理软件当中,但是一套树形菜单已经不能满足需求,所以如果能有一套比较全面的树形菜单JS特效代码,将会非常方便,下面懒人萱将超全的 ...

  3. Android 多级树形菜单

    在Android里要实现树形菜单,都是用ExpandableList(也有高手自己继承ListView或者LinearLayout来做),但是ExpandableList一般只能实现2级树形菜单... ...

  4. ztree树形菜单demo

    阅读目录 zTree树形菜单 回到顶部 zTree树形菜单 树形菜单使用方式如下:HTML引入的方式如下: <!DOCTYPE html> <html> <head> ...

  5. WebWorker 中将已处理好的 VDOM 数据提交主线程渲染 DOM

    上篇文章讲了 WebWorker 的简单用法,其实网上很多类似的文章,我写的也比较垃圾.不会的建议可以网上看比较好点的资料. 这里我会先讲下我的大致思路.然后会贴上一堆不实用的垃圾代码供参考. Web ...

  6. WEB开发中前后台树形菜单的展示设计

    在WEB开发中经常需要进行树形菜单的展示,本例通过不同角度的总结了如下三种实现方式: 通过JS的递归实现前端菜单DOM的动态创建 通过JSP的include指令结合JSTL表达式语言递归实现菜单的展示 ...

  7. jquery easy ui 1.3.4 Tree树形菜单(9)

    9.1.创建树形菜单 <ul id="tt" class="easyui-tree"> <li><span>第一级</ ...

  8. 雷林鹏分享:jQuery EasyUI 树形菜单 - 树形菜单添加节点

    jQuery EasyUI 树形菜单 - 树形菜单添加节点 本教程向您展示如何附加节点到树形菜单(Tree).我们将创建一个包含水果和蔬菜节点的食品树,然后添加一些其他水果到已存在的水果节点. 创建食 ...

  9. Bootstrap风格zTree树形菜单插件

    这是一款bootstrap风格jQuery zTree树形菜单插件,支持自定义编辑.添加列表菜单.删除列表等功能的jQuery树形菜单代码.在线演示 具体代码实现: <!DOCTYPE html ...

随机推荐

  1. 对于kmp求next数组的理解

    首先附上代码 1 void GetNext(char* p,int next[]) 2 { 3 int pLen = strlen(p); 4 next[0] = -1; 5 int k = -1; ...

  2. 010. NET5_命令参数读取+配置多种读取

    上节课遗留问题:上节脚本启动后,CSS样式丢失问题 解决办法:a.拷贝丢失的wwwroot目录:b. 给UesStaticFiles类指定读取wwwroot目录 静态文件读取 Nuget引入:Micr ...

  3. Python Web Framework All In One

    Python Web Framework All In One Django and Flask are the top Python web frameworks so far. Django ht ...

  4. zhihu level

    zhihu level https://www.zhihu.com/creator/account/growth-level refs xgqfrms 2012-2020 www.cnblogs.co ...

  5. Firewall & Network Security

    Firewall & Network Security 防火墙 & 网络安全 NAT Gateway VPC Virtual Private Cloud refs https://en ...

  6. Visual Studio Online & Web 版 VS Code

    Visual Studio Online & Web 版 VS Code https://online.visualstudio.com https://devblogs.microsoft. ...

  7. cache-control config & http cache storage location control

    cache-control config & http cache storage location control cache-control 设置 where is the storage ...

  8. taro ENV & NODE_ENV & process.env

    taro ENV & NODE_ENV & process.env https://github.com/NervJS/taro-ui/blob/dev/src/common/util ...

  9. APP 金刚区图标设计 & UI

    APP 金刚区图标设计 & UI https://www.zcool.com.cn/article/ZNzk4Njg0.html

  10. USDN代币发行 关于USDN代币

    "稳定币"是数字货币的一种,但与主流币存在的差异是,它可以通过锚定法币和加密资产等手段来维持币价的相对稳定.提及稳定币,一般会先介绍三种模式: 法币托管模式.数字资产抵押模式和无抵 ...