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 相关文章推荐
如何在Mozilla Gecko 用Javascript加载XSL
Jan 09 Javascript
javascript工具库代码
Mar 29 Javascript
jquery slibings选取同级其他元素的实现代码
Nov 15 Javascript
原生js和jquery中有关透明度设置的相关问题
Jan 08 Javascript
JS中操作JSON总结
Dec 06 Javascript
js实现同一页面多个不同运动效果的方法
Apr 10 Javascript
JavaScript中用于四舍五入的Math.round()方法讲解
Jun 15 Javascript
js阻止默认浏览器行为与冒泡行为的实现代码
May 15 Javascript
jQuery实现返回顶部按钮和scroll滚动功能[带动画效果]
Jul 05 jQuery
AngularJS中filter的使用实例详解
Aug 25 Javascript
JavaScript JMap类定义与使用方法示例
Jan 22 Javascript
微信小程序反编译的实现
Dec 10 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动态创建Web站点的方法
2011/08/14 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
2013/06/28 PHP
php实现批量下载百度云盘文件例子分享
2014/04/10 PHP
一个JavaScript继承的实现
2006/10/24 Javascript
jquery 1.4.2发布!主要是性能与API
2010/02/25 Javascript
ExtJS TabPanel beforeremove beforeclose使用说明
2010/03/31 Javascript
Node.js与PHP、Python的字符处理性能对比
2014/07/06 Javascript
浅谈JSON和JSONP区别及jQuery的ajax jsonp的使用
2014/11/23 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
2016/02/25 Javascript
AngularJS 过滤器的简单实例
2016/07/27 Javascript
jQuery Mobile和HTML5开发App推广注册页
2016/11/07 Javascript
简单实现JS计算器功能
2016/12/21 Javascript
详解使用fetch发送post请求时的参数处理
2017/04/05 Javascript
vue组件之Alert的实现代码
2017/10/17 Javascript
vue项目中使用百度地图的方法
2018/06/08 Javascript
python通过pil将图片转换成黑白效果的方法
2015/03/16 Python
Python实现把xml或xsl转换为html格式
2015/04/08 Python
wxPython使用系统剪切板的方法
2015/06/16 Python
python使用tcp实现局域网内文件传输
2020/03/20 Python
pandas进行时间数据的转换和计算时间差并提取年月日
2019/07/06 Python
使用Python的networkx绘制精美网络图教程
2019/11/21 Python
Pytorch 中retain_graph的用法详解
2020/01/07 Python
python 实现将Numpy数组保存为图像
2020/01/09 Python
tensorflow 报错unitialized value的解决方法
2020/02/06 Python
使用python脚本自动生成K8S-YAML的方法示例
2020/07/12 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
2021/01/11 Python
Html5新标签datalist实现输入框与后台数据库数据的动态匹配
2017/05/18 HTML / CSS
html5小程序飞入购物车(抛物线绘制运动轨迹点)
2020/10/19 HTML / CSS
美国嘻哈文化生活方式品牌:GLD
2018/04/15 全球购物
幼儿园教师岗位职责
2014/03/17 职场文书
职业生涯规划书前言
2014/04/15 职场文书
环保公益策划方案
2014/08/15 职场文书
收入及婚姻状况证明
2014/11/20 职场文书
刑事上诉状(无罪)
2015/05/23 职场文书
2015中秋节晚会开场白
2015/07/30 职场文书
CSS预处理框架——Stylus
2021/04/21 HTML / CSS