JavaScript根据json生成html表格的示例代码


Posted in Javascript onOctober 24, 2018

之前公司有一个需求是:通过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 "</" + 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 () {
    return this.html.join("")
  }
};

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"}),输出
end () 创建上一个start函数的标签尾 上面执行了start("table"),再执行end(),输出
tag (tag, attr, text) 创建封闭标签 tag("th", {"bgcolor": "AntiqueWhite"}, "hello"),输出 hello

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);
输出结果(结果为了好看,格式化了):

<table cellpadding=10 border=1>
  <thead>
  <tr>
    <th bgcolor=AntiqueWhite>语文</th>
    <th bgcolor=AntiqueWhite>数学</th>
    <th bgcolor=AntiqueWhite>英语</th>
  </tr>
  </thead>
  <tbody>
  <tr>
    <td>80</td>
    <td>89</td>
    <td>90</td>
  </tr>
  <tr>
    <td>合计</td>
    <td rowspan=1 colspan=2>259</td>
  </tr>
  </tbody>
</table>

效果:

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
学习ExtJS Column布局
Oct 08 Javascript
让JavaScript和其它资源并发下载的方法
Oct 16 Javascript
jquery ztree实现模糊搜索功能
Feb 25 Javascript
基于jQuery Ajax实现上传文件
Mar 24 Javascript
jQuery实现的多滑动门,多选项卡效果代码
Mar 28 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
Mar 09 Javascript
详解使用vue脚手架工具搭建vue-webpack项目
May 10 Javascript
JS实现将二维数组转为json格式字符串操作示例
Jul 12 Javascript
JS前端知识点总结之内置对象,日期对象和定时器相关操作
Jul 05 Javascript
webpack优化之代码分割与公共代码提取详解
Nov 22 Javascript
Vue组件通信入门之Provide和Inject机制
Dec 29 Javascript
vue 实现setInterval 创建和销毁实例
Jul 21 Javascript
vue项目引入Iconfont图标库的教程图解
Oct 24 #Javascript
vue中的router-view组件的使用教程
Oct 23 #Javascript
jQuery pagination分页示例详解
Oct 23 #jQuery
jquery.pagination.js分页使用教程
Oct 23 #jQuery
vue项目使用微信公众号支付总结及遇到的坑
Oct 23 #Javascript
jquery分页插件pagination使用教程
Oct 23 #jQuery
使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)
Oct 23 #Javascript
You might like
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
php 文件状态缓存带来的问题
2008/12/14 PHP
基于Discuz security.inc.php代码的深入分析
2013/06/03 PHP
使用array mutisort 实现按某字段对数据排序
2013/06/18 PHP
如何使用php判断所处服务器操作系统的类型
2013/06/20 PHP
php+mysql实现无限分类实例详解
2015/01/15 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
2017/08/15 PHP
JavaScript对象和字串之间的转换实例探讨
2013/04/21 Javascript
jQuery.extend()的实现方式详解及实例
2013/06/29 Javascript
JavaScript异步回调的Promise模式封装实例
2014/06/07 Javascript
一个简单的动态加载js和css的jquery代码
2014/09/01 Javascript
Egret引擎开发指南之运行项目
2014/09/03 Javascript
Javascript中的arguments与重载介绍
2015/03/15 Javascript
简单实现异步编程promise模式
2015/07/31 Javascript
bootstrap datetimepicker日期插件超详细使用方法介绍
2017/02/23 Javascript
老生常谈Bootstrap媒体对象
2017/07/06 Javascript
使用veloticy-ui生成文字动画效果
2018/02/08 Javascript
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
vue使用jsonp抓取qq音乐数据的方法
2018/06/21 Javascript
vue+element-ui动态生成多级表头的方法
2018/08/28 Javascript
深入了解query和params的使用区别
2019/06/24 Javascript
vue el-tree 默认展开第一个节点的实现代码
2020/05/15 Javascript
antd table按表格里的日期去排序操作
2020/11/17 Javascript
Python Web框架Flask中使用百度云存储BCS实例
2015/02/08 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
2019/08/06 Python
pycharm运行scrapy过程图解
2019/11/22 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
python 8种必备的gui库
2020/08/27 Python
介绍一下Linux中的链接
2016/06/05 面试题
如果让你测试一台高速激光打印机,你都会进行哪些测试
2012/12/04 面试题
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
2015/01/27 面试题
自我评价的正确写法
2013/09/19 职场文书
环保标语口号
2014/06/13 职场文书
Python爬取英雄联盟MSI直播间弹幕并生成词云图
2021/06/01 Python
面试分析分布式架构Redis热点key大Value解决方案
2022/03/13 Redis
JS前端使用canvas实现扩展物体类和事件派发
2022/08/05 Javascript