根据数据渲染DOM树形菜单——中途感想
根据数据渲染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树形菜单——中途感想的更多相关文章
- 议:如何将树形菜单形式的数据转化成HTML的二维表(相同内容需合并单元格)
一般做OA类管理系统,经常涉及到“组织架构”的概念,那么像这种有上下层级关系的数据一般会做成树形菜单的方式显示,底层代码必定会用到递归算法.这篇随笔的目的就是要谈谈除了用树形菜单来显示这种上下层级关系 ...
- JS树形菜单
超全的JS树形菜单源代码共享(有实例图) 树形菜单是很常用的效果,常用在管理软件当中,但是一套树形菜单已经不能满足需求,所以如果能有一套比较全面的树形菜单JS特效代码,将会非常方便,下面懒人萱将超全的 ...
- Android 多级树形菜单
在Android里要实现树形菜单,都是用ExpandableList(也有高手自己继承ListView或者LinearLayout来做),但是ExpandableList一般只能实现2级树形菜单... ...
- ztree树形菜单demo
阅读目录 zTree树形菜单 回到顶部 zTree树形菜单 树形菜单使用方式如下:HTML引入的方式如下: <!DOCTYPE html> <html> <head> ...
- WebWorker 中将已处理好的 VDOM 数据提交主线程渲染 DOM
上篇文章讲了 WebWorker 的简单用法,其实网上很多类似的文章,我写的也比较垃圾.不会的建议可以网上看比较好点的资料. 这里我会先讲下我的大致思路.然后会贴上一堆不实用的垃圾代码供参考. Web ...
- WEB开发中前后台树形菜单的展示设计
在WEB开发中经常需要进行树形菜单的展示,本例通过不同角度的总结了如下三种实现方式: 通过JS的递归实现前端菜单DOM的动态创建 通过JSP的include指令结合JSTL表达式语言递归实现菜单的展示 ...
- jquery easy ui 1.3.4 Tree树形菜单(9)
9.1.创建树形菜单 <ul id="tt" class="easyui-tree"> <li><span>第一级</ ...
- 雷林鹏分享:jQuery EasyUI 树形菜单 - 树形菜单添加节点
jQuery EasyUI 树形菜单 - 树形菜单添加节点 本教程向您展示如何附加节点到树形菜单(Tree).我们将创建一个包含水果和蔬菜节点的食品树,然后添加一些其他水果到已存在的水果节点. 创建食 ...
- Bootstrap风格zTree树形菜单插件
这是一款bootstrap风格jQuery zTree树形菜单插件,支持自定义编辑.添加列表菜单.删除列表等功能的jQuery树形菜单代码.在线演示 具体代码实现: <!DOCTYPE html ...
随机推荐
- os-hackNOS-2(wp5.3本地文件包含 rbash绕过)
一.信息收集 直接netdiscover,找到IP是 192.168.56.101 然后端口扫描一波 只打开了22和80端口,访问一下80端口,是apache首页,那就继续查目录赛.,发现了一个tsw ...
- flex 布局占位符
flex 布局占位符 空 span bug .popover-custom-class .system-guide-container .buttons-box { display: flex; fl ...
- TS & ES-Next & playground
TS & ES-Next & playground TS TypeScript: TS Playground - An online editor for exploring Type ...
- Serverless & FaaS
Serverless & FaaS Function as a Service 通过 Functions(一个事件驱动型无服务器计算平台,还可以解决复杂的业务流程问题)更加高效地进行开发; 在 ...
- svg insert shape string bug
svg insert shape string bug not support custom areaProps attributes ??? const svg = document.querySe ...
- DoH & DNS over HTTPS
DoH & DNS over HTTPS DNS over HTTPS(DoH)服务 http://mozilla.com.cn/thread-422231-1-1.html https:// ...
- C++算法代码——骨牌铺法
题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1638 题目描述 输入 输入一个正整数,表示n. 输出 输出一个正整数,表示铺法. 样 ...
- .net使用CSRedis操作Redis缓存的简单笔记(新手教程)
0.介绍 .NET Core or .NET Framework 4.0+ client for Redis and Redis Sentinel (2.8) and Cluster. Include ...
- Java HashMap源码分析(含散列表、红黑树、扰动函数等重点问题分析)
写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...
- 24_MySQL插入insert语句
本节涉及SQL语句: -- MYSQL 基础操作 1.插入insert语句 INSERT INTO t_dept(deptno,dname,loc) VALUES(70,"后勤部" ...