博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[JavaScript]根据json生成html表格
阅读量:5820 次
发布时间:2019-06-18

本文共 3221 字,大约阅读时间需要 10 分钟。

之前公司有一个需求是:通过js来生成html。而且大部分都是生成表格,直接通过字符串拼接的话,代码的可复用性太低的,所以写了个通用的json转html表格的工具。

代码

htmlKit = {    _tags: [], html: [],     _createAttrs: function (attrs) {        var attrStr = [];        for (var key in attrs) {            if (!attrs.hasOwnProperty(key)) continue;            attrStr.push(key + "=" + attrs[key] + "")        }        return attrStr.join(" ")    }, _createTag: function (tag, attrs, isStart) {        if (isStart) {            return "<" + tag + " " + this._createAttrs(attrs) + ">"        } else {            return "
" } }, start: function (tag, attrs) { this._tags.push(tag); this.html.push(this._createTag(tag, attrs, true)); return this; }, end: function () { this.html.push(this._createTag(this._tags.pop(), null, false)); return this; }, tag: function (tag, attr, text) { this.html.push(this._createTag(tag, attr, true) + text + this._createTag(tag, null, false)); return this; }, create: function () { var t = this.html.join(""); this.clear(); return t; }, clear: function () { this._tags = []; this.html = []; }};function json2Html(data) { var hk = 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) { var rowsAndCol = key.split(":"); if (rowsAndCol.length === 1) { hk.tag("td", null, _data[rowsAndCol[0]]) } else if (rowsAndCol.length === 3) { hk.tag("td", {"rowspan": rowsAndCol[0], "colspan": rowsAndCol[1]}, _data[rowsAndCol[2]]) } }); hk.end() }) }); hk.end(); hk.end(); return hk.create()}

使用说明

HtmlKit

htmlKit是创建html标签的工具

函数

函数名 作用 例子
start (tag, attrs) 创建未封闭标签头 start("table", {"cellpadding": "10", "border": "1"}),输出<table cellpadding="10" border="1">
end () 创建上一个start函数的标签尾 上面执行了start("table"),再执行end(),输出</table>
tag (tag, attr, text) 创建封闭标签 tag("th", {"bgcolor": "AntiqueWhite"}, "hello"),输出<th bgcolor="AntiqueWhite">hello</th>

json2Html

json转Html

例子:

var data = [    {        "chinese": 80,        "mathematics": 89,        "english": 90    }];var total = 0;data.forEach(function (value) {    for (key in value) {        total += value[key];    }});var htmlMetadata = {    "heads": ["语文", "数学", "英语"],    "dataKeys": [["chinese", "mathematics", "english"], ["text","1:2:total"]], // rowspan:colspan:value    "data": [data, [{"text": "合计","total": total}]]};var html = json2Html(htmlMetadata);console.info(html);

输出结果(结果为了好看,格式化了):

语文 数学 英语
80 89 90
合计 259

效果:

语文 数学 英语
80 89 90
合计 259
文中若存在错误或有更好的方法,恳请指出,谢谢。

转载地址:http://cuzdx.baihongyu.com/

你可能感兴趣的文章
Mybatis源码研究1:从JDBC到Mybatis
查看>>
推荐一个技术论坛 金蝶和通达为主的
查看>>
浅谈java中的static关键字
查看>>
关于内存
查看>>
1.1 zookeeper 单机安装配置
查看>>
1:GO语言环境搭建《Let's Go》
查看>>
centos7的安装过程中出现的问题(二)
查看>>
烂泥:下载酷我收费的MV
查看>>
Ansible中shell,command,raw模块的区别
查看>>
基于三种形式进行的RMAN不完全恢复
查看>>
named --- view
查看>>
MicroPython技术及应用前景
查看>>
[收集]【框架】搭建一个框架
查看>>
php编译安装扩展的思考
查看>>
vim命令总结
查看>>
HashMap循环方式、效率
查看>>
Oracle安装--简单篇
查看>>
组件化项目搭建(非专业,无聊的一次尝试)
查看>>
Linux基础之文本处理命令
查看>>
java获取kafka主题列表
查看>>