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 相关文章推荐
javascript在一段文字中的光标处插入其他文字
Aug 26 Javascript
利用腾讯的ip地址库做ip物理地址定位
Jul 24 Javascript
JS关键字球状旋转效果的实例代码
Nov 29 Javascript
node.js中的console用法总结
Dec 15 Javascript
Javascript中的五种数据类型详解
Dec 26 Javascript
每天一篇javascript学习小结(Function对象)
Nov 16 Javascript
javascript自动切换焦点控制效果完整实例
Feb 02 Javascript
javascript解决小数的加减乘除精度丢失的方案
May 31 Javascript
仅一个form表单 js实现注册信息依次填写提交功能
Jun 12 Javascript
JS监听滚动和id自动定位滚动
Dec 18 Javascript
使用jQuery如何写一个含验证码的登录界面
May 13 jQuery
Antd的Table组件嵌套Table以及选择框联动操作
Oct 24 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
php微信公众号开发模式详解
2016/11/28 PHP
javascript YUI 读码日记之 YAHOO.util.Dom - Part.4
2008/03/22 Javascript
ExtJS的FieldSet的column列布局
2009/11/20 Javascript
JavaScript 以对象为索引的关联数组
2010/05/19 Javascript
js 未结束的字符串常量错误解决方法
2010/06/13 Javascript
jQuery的显示和隐藏方法与css隐藏的样式对比
2013/10/18 Javascript
JS滚轮事件onmousewheel使用介绍
2013/11/01 Javascript
window.location.href的用法(动态输出跳转)
2014/08/09 Javascript
JS简单随机数生成方法
2016/09/05 Javascript
angularjs使用directive实现分页组件的示例
2017/02/07 Javascript
js数组常用最重要的方法
2018/02/04 Javascript
Vue2.0系列之过滤器的使用
2018/03/01 Javascript
vue中使用cookies和crypto-js实现记住密码和加密的方法
2018/10/18 Javascript
详解关于Angular4 ng-zorro使用过程中遇到的问题
2018/12/05 Javascript
详解Vue、element-ui、axios实现省市区三级联动
2019/05/07 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
2020/12/01 Javascript
jQuery列表动态增加和删除的实现方法
2020/11/05 jQuery
Selenium 模拟浏览器动态加载页面的实现方法
2018/05/16 Python
PyCharm设置护眼背景色的方法
2018/10/29 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
2019/08/12 Python
基于Python获取城市近7天天气预报
2019/11/26 Python
布隆过滤器的概述及Python实现方法
2019/12/08 Python
使用 Python 读取电子表格中的数据实例详解
2020/04/17 Python
Keras中的两种模型:Sequential和Model用法
2020/06/27 Python
android面试问题与答案
2016/12/27 面试题
仓库文员岗位职责
2014/04/06 职场文书
快餐公司创业计划书
2014/04/29 职场文书
党课培训心得体会
2014/09/02 职场文书
2014领导班子“四风问题”对照检查材料思想汇报(执法局)
2014/09/21 职场文书
八项规定自查自纠报告及整改措施
2014/10/26 职场文书
生产车间管理制度
2015/08/04 职场文书
2016教师国培研修感言
2015/12/08 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers
Mysql中存储引擎的区别及比较
2021/06/04 MySQL
python利用pandas分析学生期末成绩实例代码
2021/07/09 Python
小程序自定义轮播图圆点组件
2022/06/25 Javascript