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 相关文章推荐
js跨域问题之跨域iframe自适应大小实现代码
Jul 17 Javascript
jquery radio 操作代码
Mar 16 Javascript
Window.Open如何在同一个标签页打开
Jun 20 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
Apr 03 Javascript
JavaScript整除运算函数ceil和floor的区别分析
Apr 14 Javascript
js如何判断访问是来自搜索引擎(蜘蛛人)还是直接访问
Sep 14 Javascript
JS实现选定指定HTML元素对象中指定文本内容功能示例
Feb 13 Javascript
原生js实现简单的链式操作
Jul 04 Javascript
Vue项目webpack打包部署到服务器的实例详解
Jul 17 Javascript
React-Native中禁用Navigator手势返回的示例代码
Sep 09 Javascript
vue将时间戳转换成自定义时间格式的方法
Mar 02 Javascript
vue中引入mxGraph的步骤详解
May 17 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设计模式 Template (模板模式)
2011/06/26 PHP
php中filter_input函数用法分析
2014/11/15 PHP
php采用session实现防止页面重复刷新
2015/12/24 PHP
Symfony查询方法实例小结
2017/06/28 PHP
jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
2010/10/22 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
2013/06/05 Javascript
js中事件的处理与浏览器对象示例介绍
2013/11/29 Javascript
jquery easyui中treegrid用法的简单实例
2014/02/18 Javascript
JS中的log对象获取以及debug的写法介绍
2014/03/03 Javascript
Node.js模拟浏览器文件上传示例
2014/03/26 Javascript
浅谈JS闭包中的循环绑定处理程序
2014/11/09 Javascript
jQuery提示效果代码分享
2014/11/20 Javascript
jQuery检查元素存在性(推荐)
2016/09/17 Javascript
原生js实现日期计算器功能
2017/02/17 Javascript
jQuery EasyUI的TreeGrid查询功能实现方法
2017/08/08 jQuery
JS+canvas动态绘制饼图的方法示例
2017/09/12 Javascript
Vue文本模糊匹配功能如何实现
2020/07/30 Javascript
详解vue中使用transition和animation的实例代码
2020/12/12 Vue.js
python生成IP段的方法
2015/07/07 Python
遗传算法python版
2018/03/19 Python
python cs架构实现简单文件传输
2020/03/20 Python
python实现排序算法解析
2018/09/08 Python
python实现爬取百度图片的方法示例
2019/07/06 Python
解析python的局部变量和全局变量
2019/08/15 Python
基于python的docx模块处理word和WPS的docx格式文件方式
2020/02/13 Python
python环境下安装opencv库的方法
2020/03/05 Python
解决pycharm安装第三方库失败的问题
2020/05/09 Python
Python如何实现机器人聊天
2020/09/10 Python
html5 canvas简单封装一个echarts实现不了的饼图
2018/06/12 HTML / CSS
Nike英国官网:Nike.com (UK)
2017/02/13 全球购物
锐步香港官方网上商店:Reebok香港
2020/11/05 全球购物
名词解释型面试题(主要是网络)
2013/12/27 面试题
运动会广播稿30字
2014/01/21 职场文书
巾帼志愿者活动方案
2014/08/17 职场文书
运动会开幕词
2015/01/28 职场文书
python实现的人脸识别打卡系统
2021/05/08 Python