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 setTimeout()函数介绍及应用以倒计时为例
Dec 12 Javascript
深入理解javascript构造函数和原型对象
Sep 23 Javascript
DOM基础教程之使用DOM控制表单
Jan 20 Javascript
JavaScript实现的双向跨域插件分享
Jan 31 Javascript
Javascript实现图片懒加载插件的方法
Oct 20 Javascript
bootstrap table操作技巧分享
Feb 15 Javascript
微信小程序 图片宽度自适应的实现
Apr 06 Javascript
jQuery超简单遮罩层实现方法示例
Sep 06 jQuery
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
Aug 17 Javascript
JavaScript Dom 绑定事件操作实例详解
Oct 02 Javascript
微信小程序保持session会话的方法
Mar 20 Javascript
vue等两个接口都返回结果再执行下一步的实例
Sep 08 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
咖啡的传说和历史
2021/03/03 新手入门
PHP学习资料汇总与网址
2007/03/16 PHP
spl_autoload_register与autoload的区别详解
2013/06/03 PHP
非常好用的Zend Framework分页类
2014/06/25 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
PHP开发的微信现金红包功能示例
2017/06/29 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
Dom操作之兼容技巧分享
2011/09/20 Javascript
nodejs下打包模块archiver详解
2014/12/03 NodeJs
使用控制台破解百小度一个月只准改一次名字
2015/08/13 Javascript
JS实现灵巧的下拉导航效果代码
2015/08/25 Javascript
JavaScript DOM 学习总结(五)
2015/11/24 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
详解AngularJS 路由 resolve用法
2017/04/24 Javascript
vue中遇到的坑之变化检测问题(数组相关)
2017/10/13 Javascript
webpack+vuex+axios 跨域请求数据的示例代码
2018/03/06 Javascript
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
2019/07/15 Javascript
解决vue 退出动画无效的问题
2020/08/09 Javascript
JavaScript实现滑块验证解锁
2021/01/07 Javascript
Python中zip()函数用法实例教程
2014/07/31 Python
把项目从Python2.x移植到Python3.x的经验总结
2015/04/20 Python
python学生信息管理系统
2018/03/13 Python
解决python3 网络请求路径包含中文的问题
2018/05/10 Python
Django实现单用户登录的方法示例
2019/03/28 Python
scrapy-redis源码分析之发送POST请求详解
2019/05/15 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
Python 字典中的所有方法及用法
2020/06/10 Python
报关员个人职业生涯规划书
2014/03/12 职场文书
捐资助学倡议书
2014/04/15 职场文书
药品业务员岗位职责
2014/04/17 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
中秋客户感谢信
2015/01/22 职场文书
常务副总经理岗位职责
2015/02/02 职场文书
施工单位工程部经理岗位职责
2015/04/09 职场文书
2015年工商局个人工作总结
2015/07/23 职场文书
MySQL表类型 存储引擎 的选择
2021/11/11 MySQL