Javascript 通過json自動(dòng)生成Dom的代碼
更新時(shí)間:2010年04月01日 17:58:06 作者:
主要還是通過遞歸和迭代來遍歷json成員生成html元素 ,比較好的是num能制定循環(huán)次數(shù)可以少寫很多代碼.具體應(yīng)用看場(chǎng)景了
json轉(zhuǎn)html 三重奏
原料:json
var json={
'div':{id:'flower',className:"a1",sub:[
{
'ul':{id:'flower1',className:["a2","a3"],sub:[
{'li':{num:3,con:"內(nèi)容內(nèi)容內(nèi)容",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=循環(huán)次數(shù)
fn=綁定函數(shù)
con=元素內(nèi)容
sub =代表有子節(jié)點(diǎn)
主菜: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,則循環(huán)默認(rèn)為1,因?yàn)閕d不可重復(fù)
for(var j=0;j<num;j++){
var obj= document.createElement(attr);
parent ? parent.appendChild(obj) : document.body.appendChild(obj);//遞歸時(shí)傳入父元素,沒有則默認(rèn)從body輸出
for(var attr2 in data[attr]){
var _tempAttr=data[attr][attr2];
switch(attr2){
case "id":
obj.id=_tempAttr;
break;
case "className": //支持多個(gè)class傳入~簡(jiǎn)了點(diǎn)~
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": //如果有子節(jié)點(diǎn)則開始遞歸
for(var i=0;i<_tempAttr.length;i++){
_tempAttr[i].sub ? this.init(_tempAttr[i]) : this.init(_tempAttr[i],obj)
}
break;
case "con"://設(shè)置內(nèi)容,可以生成新的子元素
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 : //設(shè)置屬性
obj.setAttribute(attr2,_tempAttr);break;
}
}
}
}
return this;
}
}
JsonToHtml.init(json); //初始化
上菜
<div id="flower" class="a1">
<ul id="flower1" class="a2 a3">
<li>內(nèi)容內(nèi)容內(nèi)容</li>
<li>內(nèi)容內(nèi)容內(nèi)容</li>
<li>內(nèi)容內(nèi)容內(nèi)容</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能制定循環(huán)次數(shù)可以少寫很多代碼.具體應(yīng)用看場(chǎng)景了
這只是個(gè)小例子,期待后續(xù)!
原料:json
復(fù)制代碼 代碼如下:
var json={
'div':{id:'flower',className:"a1",sub:[
{
'ul':{id:'flower1',className:["a2","a3"],sub:[
{'li':{num:3,con:"內(nèi)容內(nèi)容內(nèi)容",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=循環(huán)次數(shù)
fn=綁定函數(shù)
con=元素內(nèi)容
sub =代表有子節(jié)點(diǎn)
主菜:method
復(fù)制代碼 代碼如下:
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,則循環(huán)默認(rèn)為1,因?yàn)閕d不可重復(fù)
for(var j=0;j<num;j++){
var obj= document.createElement(attr);
parent ? parent.appendChild(obj) : document.body.appendChild(obj);//遞歸時(shí)傳入父元素,沒有則默認(rèn)從body輸出
for(var attr2 in data[attr]){
var _tempAttr=data[attr][attr2];
switch(attr2){
case "id":
obj.id=_tempAttr;
break;
case "className": //支持多個(gè)class傳入~簡(jiǎn)了點(diǎn)~
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": //如果有子節(jié)點(diǎn)則開始遞歸
for(var i=0;i<_tempAttr.length;i++){
_tempAttr[i].sub ? this.init(_tempAttr[i]) : this.init(_tempAttr[i],obj)
}
break;
case "con"://設(shè)置內(nèi)容,可以生成新的子元素
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 : //設(shè)置屬性
obj.setAttribute(attr2,_tempAttr);break;
}
}
}
}
return this;
}
}
JsonToHtml.init(json); //初始化
上菜
復(fù)制代碼 代碼如下:
<div id="flower" class="a1">
<ul id="flower1" class="a2 a3">
<li>內(nèi)容內(nèi)容內(nèi)容</li>
<li>內(nèi)容內(nèi)容內(nèi)容</li>
<li>內(nèi)容內(nèi)容內(nèi)容</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能制定循環(huán)次數(shù)可以少寫很多代碼.具體應(yīng)用看場(chǎng)景了
這只是個(gè)小例子,期待后續(xù)!
您可能感興趣的文章:
- javascript dom 操作詳解 js加強(qiáng)
- javascript DOM 操作基礎(chǔ)知識(shí)小結(jié)
- Javascript Event事件中IE與標(biāo)準(zhǔn)DOM的比較
- javascript 刪除dom對(duì)象的事件函數(shù)代碼
- javascript轉(zhuǎn)換字符串為dom對(duì)象(字符串動(dòng)態(tài)創(chuàng)建dom)
- javascript拓展DOM操作 prependChild insertAfert
- javascript 基礎(chǔ)篇4 window對(duì)象,DOM
- javascript針對(duì)DOM的應(yīng)用實(shí)例(一)
- JavaScript判斷DOM何時(shí)加載完畢的技巧
- JavaScript與DOM組合動(dòng)態(tài)創(chuàng)建表格實(shí)例
- js加載之使用DOM方法動(dòng)態(tài)加載Javascript文件
- javascript中對(duì)Attr(dom中屬性)的操作示例講解
- javascript調(diào)試之DOM斷點(diǎn)調(diào)試法使用技巧分享
- javascript 獲取HTML DOM父、子、臨近節(jié)點(diǎn)
- javascript獲取dom的下一個(gè)節(jié)點(diǎn)方法
- JavaScript DOM 學(xué)習(xí)總結(jié)(五)
相關(guān)文章
比較詳細(xì)的關(guān)于javascript 解析json的代碼
JSON (JavaScript Object Notation)一種簡(jiǎn)單的數(shù)據(jù)格式,比xml更輕巧。 JSON 是 JavaScript 原生格式,這意味著在 JavaScript 中處理 JSON 數(shù)據(jù)不需要任何特殊的 API 或工具包。2009-12-12詳解JSON1:使用TSQL查詢數(shù)據(jù)和更新JSON數(shù)據(jù)
這篇文章主要介紹了使用TSQL查詢數(shù)據(jù)和更新JSON數(shù)據(jù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-11-11把普通對(duì)象轉(zhuǎn)換成json格式的對(duì)象的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)硪黄哑胀▽?duì)象轉(zhuǎn)換成json格式的對(duì)象的簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-07-07