根据数据渲染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. fullstack web projects in action

    fullstack web projects in action web 全栈项目实战 Angular 全栈 Angular + TypeScript + Nest.js + PostgreSQL + ...

  2. flutter 使用vs编辑windows插件

    创建插件 mkdir win_test && cd win_test flutter create -t plugin --platforms windows ./ 找到win_tes ...

  3. vue v-io 父子组件双向绑定多个数据

    vue-io-directive 可以减少使用emit,组件自带的v-model好像也只能设置一个 安装 npm i vue-io-directive 使用 import Vue from 'vue' ...

  4. Baccarat中挖矿、兑换和做市的三角关系是什么?

    NGK在这波DeFi潮中,推出了Baccarat,为用户带来了流动性挖矿收益,今天笔者就讲一讲Baccarat中挖矿.兑换和做市的关系. 兑换和做市是什么关系呢?众所周知,换币者,是用一种货币去换另一 ...

  5. java放射机制的学习心得

    概述 之前在了解Spring的类加载机制的时候,了解了java的反射机制.但是,我对反射理解一直不深.也一直有点疑惑:Spring为什么利用反射创建对象?直接new对象和依靠反射创建对象有什么区别?什 ...

  6. HttpDns 原理是什么

    本文转载自HttpDns 原理是什么 什么是 DNS DNS(Domain Name System,域名系统),DNS 服务用于在网络请求时,将域名转为 IP 地址.能够使用户更方便的访问互联网,而不 ...

  7. Anno&Viper -分布式锁服务端怎么实现

    1.Anno简介 Anno是一个微服务框架引擎.入门简单.安全.稳定.高可用.全平台可监控.依赖第三方框架少.底层通讯RPC(Remote Procedure Call)采用稳定可靠经过无数成功项目验 ...

  8. springboot学习过程随记

    1.整合shiro+jwt(若忘记需结合测试代码springboot-mybatisplus-shiro-demo看) 配置比较简单 定义一个类继承AuthorizingRealm 如下: (1)pu ...

  9. vs调试qt代码,无法单步调试

    在使用vs调试qt代码时,可以编译但无法单步调试QT源码.报错缺少qmain_win.cpp或者其他q******.cpp文件. 1.因为安装qt时没有安装qt源码库,重新下载一个src源码就可以了. ...

  10. Pyqt5实现model/View,解决tableView出现空白行问题。

    项目中表格需要显示5万条数据以上,并且实时刷新.开始使用的tableWidget,数据量一大显得力不从心,所以使用Qt的Model/View来重新实现.下面是更改之前编写的小Demo. import ...