源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Javascript 通过json自动生成Dom的代码

  • 时间:2022-07-21 08:35 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Javascript 通过json自动生成Dom的代码
json转html 三重奏 原料:json
[u]复制代码[/u] 代码如下:
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
[u]复制代码[/u] 代码如下:
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); //初始化 上菜
[u]复制代码[/u] 代码如下:
<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能制定循环次数可以少写很多代码.具体应用看场景了 这只是个小例子,期待后续!
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部