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 相关文章推荐
转换json格式的日期为Javascript对象的函数
Jul 13 Javascript
关于JavaScript的with 语句的使用方法
May 09 Javascript
用JQuery在网页中实现分隔条功能的代码
Aug 09 Javascript
javascript函数式编程实例分析
Apr 25 Javascript
jQuery异步上传文件插件ajaxFileUpload详细介绍
May 19 Javascript
浅析创建javascript对象的方法
May 13 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
May 17 Javascript
angularjs 页面自适应高度的方法
Jan 17 Javascript
深入浅析Vue.js中 computed和methods不同机制
Mar 22 Javascript
vue弹窗组件的实现示例代码
Sep 10 Javascript
详解为什么Vue中不要用index作为key(diff算法)
Apr 04 Javascript
vue实现lodop打印功能的示例
Nov 11 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封装json通信接口详解及实例
2017/03/07 PHP
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
锋利的jQuery 第三章章节总结的例子
2010/03/23 Javascript
有道JavaScript监听浏览器的问题
2010/06/23 Javascript
JS获取图片高度宽度的方法分享
2015/04/17 Javascript
深入理解JS中的Function.prototype.bind()方法
2016/10/11 Javascript
JS编写函数实现对身份证号码最后一位的验证功能
2016/12/29 Javascript
基于vue2.x的电商图片放大镜插件的使用
2018/01/22 Javascript
vue.js删除列表中的一行
2018/06/30 Javascript
vue2使用keep-alive缓存多层列表页的方法
2018/09/21 Javascript
laydate如何根据开始时间或者结束时间限制范围
2018/11/15 Javascript
浅析TypeScript 命名空间
2020/03/19 Javascript
基于 Vue 的 Electron 项目搭建过程图文详解
2020/07/22 Javascript
[52:27]2018DOTA2亚洲邀请赛 3.31 小组赛B组 paiN vs Secret
2018/04/01 DOTA
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
2014/06/09 Python
Python Tkinter简单布局实例教程
2014/09/03 Python
跟老齐学Python之从格式化表达式到方法
2014/09/28 Python
tensorflow 使用flags定义命令行参数的方法
2018/04/23 Python
pytorch + visdom CNN处理自建图片数据集的方法
2018/06/04 Python
Python利用递归实现文件的复制方法
2018/10/27 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
win10安装python3.6的常见问题
2020/07/01 Python
python+flask编写一个简单的登录接口
2020/11/13 Python
ASOS比利时:英国线上零售商及自有品牌
2018/07/29 全球购物
英国在线自行车店:Merlin Cycles
2018/08/20 全球购物
澳大利亚窗帘商店:Curtain Wonderland
2019/12/01 全球购物
英国珠宝和手表专家:Pleasance & Harper
2020/10/21 全球购物
介绍下Lucene建立索引的过程
2016/03/02 面试题
干部现实表现材料
2014/02/13 职场文书
医院保洁员岗位职责
2015/02/13 职场文书
毕业生个人总结
2015/02/28 职场文书
2015年高三教学工作总结
2015/07/21 职场文书
被委托人身份证明
2015/08/07 职场文书
医学生自荐信范文(2016精选篇)
2016/01/28 职场文书
numpy数据类型dtype转换实现
2021/04/24 Python
纯html+css实现打字效果
2021/08/02 HTML / CSS