Javascript 通过json自动生成Dom小示例

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能制定循环次数可以少写很多代码.具体应用看场景了

这只是个小例子,期待后续!

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值