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 相关文章推荐
文本链接逐个出现的js脚本
Dec 12 Javascript
各种效果的jquery ui(接口)介绍
Sep 17 Javascript
JavaScript使用技巧精萃[代码非常实用]
Nov 21 Javascript
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
Jul 15 Javascript
js判断undefined类型,undefined,null, 的区别详细解析
Dec 16 Javascript
javascript生成大小写字母
Jul 03 Javascript
基于javascript实现文字无缝滚动效果
Mar 22 Javascript
无缝滚动的简单实现代码(推荐)
Jun 07 Javascript
为Jquery EasyUI 组件加上清除功能的方法(详解)
Apr 13 jQuery
vue ssr 指南详读
Jun 29 Javascript
JavaScript实现的DOM绘制柱状图效果示例
Aug 08 Javascript
抖音上用记事本编写爱心小程序教程
Apr 17 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中通过ADODB库实现调用Access数据库之修正版本
2006/12/31 PHP
5种PHP创建数组的实例代码分享
2014/01/17 PHP
js select option对象小结
2013/12/20 Javascript
JS实现鼠标滑过链接改变网页背景颜色的方法
2015/10/20 Javascript
js实现省份下拉菜单效果
2017/02/15 Javascript
基于JSON数据格式详解
2017/08/31 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
2018/05/16 Javascript
JavaScript类数组对象转换为数组对象的方法实例分析
2018/07/24 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
2018/09/04 Javascript
angularjs性能优化的方法
2018/09/05 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
2019/02/21 Javascript
JS实现的碰撞检测与周期移动完整示例
2019/09/02 Javascript
微信小程序上传帖子的实例代码(含有文字图片的微信验证)
2020/07/11 Javascript
在vue中获取wangeditor的html和text的操作
2020/10/23 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
使用Python编写提取日志中的中文的脚本的方法
2015/04/30 Python
Python中动态检测编码chardet的使用教程
2017/07/06 Python
python 接口测试response返回数据对比的方法
2018/02/11 Python
python实现本地图片转存并重命名的示例代码
2018/10/27 Python
在pycharm下设置自己的个性模版方法
2019/07/15 Python
在django view中给form传入参数的例子
2019/07/19 Python
Python使用get_text()方法从大段html中提取文本的实例
2019/08/27 Python
Pytorch中实现只导入部分模型参数的方式
2020/01/02 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
2020/06/04 Python
详解Sticky Footer 绝对底部的两种套路
2017/11/03 HTML / CSS
HTML5的video标签的浏览器兼容性增强方案分享
2016/05/19 HTML / CSS
丝芙兰香港官网:Sephora香港
2018/03/13 全球购物
附答案的Java面试题
2012/11/19 面试题
C#如何判断当前用户是否输入某个域
2015/12/07 面试题
现场施工员岗位职责
2014/03/10 职场文书
县级领导干部开展党的群众路线教育实践活动工作汇报
2014/10/25 职场文书
新郎婚礼答谢词
2015/01/04 职场文书
为什么阅读对所有年龄段的孩子都很重要?
2019/07/08 职场文书
八年级作文之感悟亲情
2019/11/20 职场文书
python 实现体质指数BMI计算
2021/05/26 Python
python利用while求100内的整数和方式
2021/11/07 Python