JavaScript根据json生成html表格的示例代码
之前公司有一个需求是:通过js来生成html。而且大部分都是生成表格,直接通过字符串拼接的话,代码的可复用性太低的,所以写了个通用的json转html表格的工具。
代码
htmlKit={ _tags:[],html:[], _createAttrs:function(attrs){ varattrStr=[]; for(varkeyinattrs){ if(!attrs.hasOwnProperty(key))continue; attrStr.push(key+"="+attrs[key]+"") } returnattrStr.join("") }, _createTag:function(tag,attrs,isStart){ if(isStart){ return"<"+tag+""+this._createAttrs(attrs)+">" }else{ return""+tag+">" } }, start:function(tag,attrs){ this._tags.push(tag); this.html.push(this._createTag(tag,attrs,true)) }, end:function(){ this.html.push(this._createTag(this._tags.pop(),null,false)) }, tag:function(tag,attr,text){ this.html.push(this._createTag(tag,attr,true)+text+this._createTag(tag,null,false)) }, create:function(){ returnthis.html.join("") } }; functionjson2Html(data){ varhk=htmlKit; hk.start("table",{"cellpadding":"10","border":"1"}); hk.start("thead"); hk.start("tr"); data["heads"].forEach(function(head){ hk.tag("th",{"bgcolor":"AntiqueWhite"},head) }); hk.end(); hk.end(); hk.start("tbody"); data["data"].forEach(function(dataList,i){ dataList.forEach(function(_data){ hk.start("tr"); data["dataKeys"][i].forEach(function(key){ varrowsAndCol=key.split(":"); if(rowsAndCol.length===1){ hk.tag("td",null,_data[rowsAndCol[0]]) }elseif(rowsAndCol.length===3){ hk.tag("td",{"rowspan":rowsAndCol[0],"colspan":rowsAndCol[1]},_data[rowsAndCol[2]]) } }); hk.end() }) }); hk.end(); hk.end(); returnhk.create() }
使用说明
HtmlKit
htmlKit是创建html标签的工具
函数
函数名
作用
例子
start(tag,attrs)
创建未封闭标签头
start("table",{"cellpadding":"10","border":"1"}),输出
end()
创建上一个start函数的标签尾
上面执行了start("table"),再执行end(),输出
tag(tag,attr,text)
创建封闭标签
tag("th",{"bgcolor":"AntiqueWhite"},"hello"),输出
json2Html
json转Html
例子:
vardata=[ { "chinese":80, "mathematics":89, "english":90 } ]; vartotal=0; data.forEach(function(value){ for(keyinvalue){ total+=value[key]; } }); varhtmlMetadata={ "heads":["语文","数学","英语"], "dataKeys":[["chinese","mathematics","english"],["text","1:2:total"]],//rowspan:colspan:value "data":[data,[{"text":"合计","total":total}]] }; varhtml=json2Html(htmlMetadata); console.info(html); 输出结果(结果为了好看,格式化了):语文 数学 英语 80 89 90 合计 259
效果:
语文
数学
英语
80
89
90
合计
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。