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 相关文章推荐
ExtJS 入门
Oct 29 Javascript
js 弹出框只弹一次(二次修改之后的)
Nov 26 Javascript
深入解析JavaScript中的数字对象与字符串对象
Oct 21 Javascript
理解Javascript图片预加载
Feb 23 Javascript
JS中innerHTML和pasteHTML的区别实例分析
Jun 22 Javascript
手机图片预览插件photoswipe.js使用总结
Aug 25 Javascript
ES6中新增的Object.assign()方法详解
Sep 22 Javascript
在Vue中获取组件声明时的name属性方法
Sep 12 Javascript
JS尾递归的实现方法及代码优化技巧
Jan 19 Javascript
Node Mongoose用法详解【Mongoose使用、Schema、对象、model文档等】
May 13 Javascript
微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法
May 19 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
Jul 22 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和ACCESS写聊天室(九)
2006/10/09 PHP
PHP5下$_SERVER变量不再受magic_quotes_gpc保护的弥补方法
2012/10/31 PHP
hadoop中一些常用的命令介绍
2013/06/19 PHP
浅谈php安全性需要注意的几点事项
2014/07/17 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
2016/10/08 PHP
JS下拉缓冲菜单示例代码
2013/08/30 Javascript
微信小程序  简单实例(阅读器)的实例开发
2016/09/29 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
2016/12/25 Javascript
利用Angularjs中模块ui-route管理状态的方法
2016/12/27 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
关于foreach循环中遇到的问题小结
2017/05/08 Javascript
在vue项目中引入highcharts图表的方法
2019/01/21 Javascript
Vue登录拦截 登录后继续跳转指定页面的操作
2020/08/04 Javascript
python进阶教程之词典、字典、dict
2014/08/29 Python
详细讲解用Python发送SMTP邮件的教程
2015/04/29 Python
详解Python中的条件判断语句
2015/05/14 Python
python根据京东商品url获取产品价格
2015/08/09 Python
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
Python基于pygame实现图片代替鼠标移动效果
2015/11/11 Python
Python如何实现守护进程的方法示例
2017/02/08 Python
Python向日志输出中添加上下文信息
2017/05/24 Python
python表格存取的方法
2018/03/07 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
2018/08/10 Python
python set集合使用方法解析
2019/11/05 Python
解决Django no such table: django_session的问题
2020/04/07 Python
Django 解决上传文件时,request.FILES为空的问题
2020/05/20 Python
Python新手学习标准库模块命名
2020/05/29 Python
HTML中使用SVG与SVG预定义形状元素介绍
2013/06/28 HTML / CSS
美国受欢迎的女性牛仔裤品牌:DL1961
2016/11/12 全球购物
2014年会演讲稿范文
2014/01/06 职场文书
先进党支部事迹材料
2014/01/13 职场文书
给面试官的感谢信
2014/02/01 职场文书
幼儿园秋季开学寄语
2014/08/02 职场文书
社区领导班子四风问题原因分析及整改措施
2014/09/28 职场文书
西湖英语导游词
2015/02/06 职场文书
mysql5.7使用binlog 恢复数据的方法
2021/06/03 MySQL