Javascript 通过json自动生成Dom的代码


Posted in Javascript onApril 01, 2010

json转html 三重奏
原料:json

var json={ 
'div':{id:'flower',className:"a1",sub:[ 
{ 
'ul':{id:'flower1',className:["a2","a3"],sub:[ 
{'li':{num:3,con:"内容内容内容",fn:{'click':function(){alert('我是LiLi')}}}} 
]} 
}, 
{ 
'ul':{id:'flower4',className:["a2","a3"],sub:[ 
{'li':{num:3,con:"第2轮了",fn:{'click':function(){alert('我是LiLi')}}}} 
]} 
}, 
{ 
'span':{id:'q',con:"我是span"} 
} 
]} 
}

id=id
className=class
num=循环次数
fn=绑定函数
con=元素内容
sub =代表有子节点
主菜:method
JsonToHtml={ 
init:function(data,parent){//jsonDB,父元素 
for(var attr in data){ 
if(data[attr]["id"]){var num=1}else{var num=data[attr]["num"]||1}//如果存在id,则循环默认为1,因为id不可重复 
for(var j=0;j<num;j++){ 
var obj= document.createElement(attr); 
parent ? parent.appendChild(obj) : document.body.appendChild(obj);//递归时传入父元素,没有则默认从body输出 
for(var attr2 in data[attr]){ 
var _tempAttr=data[attr][attr2]; 
switch(attr2){ 
case "id": 
obj.id=_tempAttr; 
break; 
case "className": //支持多个class传入~简了点~ 
if(_tempAttr.length && _tempAttr.pop){ 
for(var k=0;k<_tempAttr.length;++k){ 
obj.className= obj.className+" "+_tempAttr[k] ; 
} 
}else{ obj.className =_tempAttr;} 
break; 
case "sub": //如果有子节点则开始递归 
for(var i=0;i<_tempAttr.length;i++){ 
_tempAttr[i].sub ? this.init(_tempAttr[i]) : this.init(_tempAttr[i],obj) 
} 
break; 
case "con"://设置内容,可以生成新的子元素 
obj.innerHTML=_tempAttr; 
break; 
case "num": 
break; 
case "fn"://绑定方法 
for(var fns in _tempAttr){ 
if (window.addEventListener) { 
obj.addEventListener(fns, _tempAttr[fns], false); 
} else { 
if (window.attachEvent) { 
obj.attachEvent("on" + fns, _tempAttr[fns]); 
} 
} 
} 
break; 
default : //设置属性 
obj.setAttribute(attr2,_tempAttr);break; 
} 
} 
} 
} 
return this; 
} 
}

JsonToHtml.init(json); //初始化
上菜
<div id="flower" class="a1"> 
<ul id="flower1" class="a2 a3"> 
<li>内容内容内容</li> 
<li>内容内容内容</li> 
<li>内容内容内容</li> 
</ul> 
<ul id="flower4" class="a2 a3"> 
<li>第2轮了</li> 
<li>第2轮了</li> 
<li>第2轮了</li> 
</ul> 

<span id="q">我是span</span> 
<div>

主要还是通过递归和迭代来遍历json成员生成html元素 ,比较好的是num能制定循环次数可以少写很多代码.具体应用看场景了
这只是个小例子,期待后续!
Javascript 相关文章推荐
学习YUI.Ext第七日-View&amp;JSONView Part Two-一个画室网站的案例
Mar 10 Javascript
鼠标划过实现延迟加载并隐藏层的js代码
Oct 11 Javascript
实例详解JavaScript获取链接参数的方法
Jan 01 Javascript
JavaScript html5利用FileReader实现上传功能
Mar 27 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
Apr 20 jQuery
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
Jul 26 Javascript
JavaScript ES6箭头函数使用指南
Dec 30 Javascript
JS使用数组实现的队列功能示例
Mar 04 Javascript
解决vue跨域axios异步通信问题
Apr 17 Javascript
微信小程序实现的picker多级联动功能示例
May 23 Javascript
解决vue-cli webpack打包开启Gzip 报错问题
Jul 24 Javascript
es6函数name属性功能与用法实例分析
Apr 18 Javascript
JS中confirm,alert,prompt函数使用区别分析
Apr 01 #Javascript
JavaScript中实现块作用域的方法
Apr 01 #Javascript
cloudgamer出品ImageZoom 图片放大效果
Apr 01 #Javascript
js 异步处理进度条
Apr 01 #Javascript
JavaScript中String和StringBuffer的速度之争
Apr 01 #Javascript
Cookie 小记
Apr 01 #Javascript
javascript操作cookie的文章(设置,删除cookies)
Apr 01 #Javascript
You might like
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
PHP面向对象学习之parent::关键字
2017/01/18 PHP
正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
2008/09/27 Javascript
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
Jquery 数组操作大全个人总结
2013/11/13 Javascript
JavaScript+html5 canvas制作色彩斑斓的正方形效果
2016/01/27 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
jQuery Ajax 实例代码 ($.ajax、$.post、$.get)
2016/04/29 Javascript
jQuery双向列表选择器select版
2016/11/01 Javascript
基于AGS JS开发自定义贴图图层
2017/03/31 Javascript
几种响应式文字详解
2017/05/19 Javascript
微信小程序分页加载的实例代码
2017/07/11 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
vue项目首屏打开速度慢的解决方法
2019/03/31 Javascript
vuex存值与取值的实例
2019/11/06 Javascript
javascript解析json格式的数据方法详解
2020/08/07 Javascript
python实现合并两个数组的方法
2015/05/16 Python
python中input()与raw_input()的区别分析
2016/02/27 Python
python实现学生管理系统
2018/01/11 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
2018/02/18 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
2019/11/15 Python
使用 Supervisor 监控 Python3 进程方式
2019/12/05 Python
Python中使用threading.Event协调线程的运行详解
2020/05/02 Python
python初步实现word2vec操作
2020/06/09 Python
简单的Python人脸识别系统
2020/07/14 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
python RSA加密的示例
2020/12/09 Python
生产厂厂长岗位职责
2013/12/25 职场文书
研讨会致辞
2015/07/31 职场文书
周末问候语大全
2015/11/10 职场文书
银行培训心得体会范文
2016/01/09 职场文书
导游词之西递宏村
2019/12/10 职场文书
微信小程序和php的登录实现
2021/04/01 PHP
Mysql调整优化之四种分区方式以及组合分区
2022/04/13 MySQL
关于Redis的主从复制及哨兵问题
2022/06/16 Redis