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 相关文章推荐
Javascript----文件操作
Jan 18 Javascript
js一组验证函数
Dec 20 Javascript
AngularJS入门教程(二):AngularJS模板
Dec 06 Javascript
jQuery ztree实现动态树形多选菜单
Aug 12 Javascript
vue项目中v-model父子组件通信的实现详解
Dec 10 Javascript
Angular实现较为复杂的表格过滤,删除功能示例
Dec 23 Javascript
Vue.js子组件向父组件通信的方法实例代码详解
Dec 10 Javascript
js核心基础之构造函数constructor用法实例分析
May 11 Javascript
JavaScript一元正号运算符示例代码
Jun 30 Javascript
vue+elementUi图片上传组件使用详解
Aug 20 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
Dec 29 Javascript
JavaScript如何使用插值实现图像渐变
Jun 28 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 分页分组类
2009/12/10 PHP
解析php curl_setopt 函数的相关应用及介绍
2013/06/17 PHP
使用CodeIgniter的类库做图片上传
2014/06/12 PHP
php判断文件上传图片格式的实例详解
2017/09/30 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
2019/09/30 PHP
JS实现打开本地文件或文件夹
2021/03/09 Javascript
js禁止页面使用右键(简单示例代码)
2013/11/13 Javascript
js和css写一个可以自动隐藏的悬浮框
2014/03/05 Javascript
jQuery实现回车键(Enter)切换文本框焦点的代码实例
2014/05/05 Javascript
控制文字内容的显示与隐藏示例
2014/06/11 Javascript
javascript实现支持移动设备画廊
2015/08/24 Javascript
js调用屏幕宽度的简单方法
2016/11/14 Javascript
jquery 标签 隔若干行加空白或者加虚线的方法
2016/12/07 Javascript
jQuery插件DataTable使用方法详解(.Net平台)
2016/12/22 Javascript
HTML5 js实现拖拉上传文件功能
2020/11/20 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
2017/03/23 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
2017/04/27 jQuery
VueJs组件prop验证简单介绍
2017/09/12 Javascript
详解vue-cli快速构建vue应用并实现webpack打包
2017/12/13 Javascript
vue下history模式刷新后404错误解决方法
2018/08/18 Javascript
[01:09:13]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第三场 1月19日
2021/03/11 DOTA
Python fileinput模块使用实例
2015/05/28 Python
python七夕浪漫表白源码
2019/04/05 Python
python实现给微信指定好友定时发送消息
2019/04/29 Python
python flask 如何修改默认端口号的方法步骤
2019/07/12 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
使用python实现飞机大战游戏
2020/03/23 Python
科学发展观标语
2014/10/08 职场文书
2014工程部年度工作总结
2014/12/17 职场文书
2014年企业党建工作总结
2014/12/18 职场文书
西湖英语导游词
2015/02/06 职场文书
2015年酒店工作总结
2015/04/28 职场文书
2016年教师党员公开承诺书
2016/03/24 职场文书
MySQL 角色(role)功能介绍
2021/04/24 MySQL
解决numpy和torch数据类型转化的问题
2021/05/23 Python
MySQL基于索引的压力测试的实现
2021/11/07 MySQL