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 相关文章推荐
jQuery ui1.7 dialog只能弹出一次问题
Aug 27 Javascript
父子窗体间传递JSON格式的数据的代码
Dec 25 Javascript
jquery在IE、FF浏览器的差别详细探讨
Apr 28 Javascript
js如何设置在iframe框架中指定div不显示
Dec 04 Javascript
一个简单的jQuery计算器实现了连续计算功能
Jul 21 Javascript
jQuery表单美化插件jqTransform使用详解
Apr 12 Javascript
JavaScript采用递归算法计算阶乘实例
Aug 04 Javascript
jQuery 1.9.1源码分析系列(十五)之动画处理
Dec 03 Javascript
jQuery 3.0 的变化及使用方法
Feb 01 Javascript
jquery实现下拉框功能效果【实例代码】
May 06 Javascript
Ionic3实现图片瀑布流布局
Aug 09 Javascript
vue 使用post/get 下载导出文件操作
Aug 07 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生成静态HTML文档的原理
2012/10/29 PHP
浅析PHP中strlen和mb_strlen的区别
2014/08/31 PHP
JQuery实现自定义对话框的代码
2008/06/15 Javascript
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
2010/05/25 Javascript
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
Javascript writable特性介绍
2015/02/27 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
JS根据浏览器窗口大小实时动态改变网页文字大小的方法
2016/02/25 Javascript
AngularJS基础 ng-focus 指令简单示例
2016/08/01 Javascript
解决ztree搜索中多级菜单展示不全问题
2017/07/05 Javascript
jQuery替换节点元素的操作方法
2018/03/18 jQuery
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
node-red File读取好保存实例讲解
2019/09/11 Javascript
Vue+Node实现的商城用户管理功能示例
2019/12/23 Javascript
详解微信小程序之提高应用速度小技巧
2020/01/07 Javascript
在python中计算ssim的方法(与Matlab结果一致)
2019/12/19 Python
python——全排列数的生成方式
2020/02/26 Python
python实现从ftp服务器下载文件
2020/03/03 Python
Python 中由 yield 实现异步操作
2020/05/04 Python
keras 自定义loss model.add_loss的使用详解
2020/06/22 Python
python代码能做成软件吗
2020/07/24 Python
python利用opencv保存、播放视频
2020/11/02 Python
Grow Gorgeous美国官网:只要八天,体验唤醒毛囊后新生的茂密秀发
2018/06/04 全球购物
SportsDirect.com新加坡:英国第一体育零售商
2019/03/30 全球购物
Stührling手表官方网站:男女高品质时尚手表的领先零售商
2021/01/07 全球购物
开学典礼决心书
2014/03/11 职场文书
副科级后备干部考察材料
2014/05/15 职场文书
民生工作实施方案
2014/05/31 职场文书
临床专业自荐信
2014/06/22 职场文书
倡议书的写法
2014/08/30 职场文书
2014年大学团支部工作总结
2014/12/02 职场文书
2014年语文教学工作总结
2014/12/17 职场文书
新手必备之MySQL msi版本下载安装图文详细教程
2021/05/21 MySQL
Linux系统下安装PHP7.3版本
2021/06/26 PHP
MySQL分区表管理命令汇总
2022/03/21 MySQL
MySQL主从切换的超详细步骤
2022/06/28 MySQL