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 相关文章推荐
使用CSS和jQuery模拟select并附提交后取得数据的代码
Oct 18 Javascript
js实现div弹出层的方法
Nov 20 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
Aug 26 Javascript
JQ选择器_选择同类元素的第N个子元素的实现方法
Sep 08 Javascript
jQuery简单实现遍历单选框的方法
Mar 06 Javascript
MUI 上拉刷新/下拉加载功能实例代码
Apr 13 Javascript
使用vue构建一个上传图片表单
Jul 04 Javascript
Vue.js devtool插件安装后无法使用的解决办法
Nov 27 Javascript
create-react-app中添加less支持的实现
Nov 15 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
Jan 16 jQuery
微信小程序绘制半圆(弧形)进度条
Nov 18 Javascript
JavaScript组合继承详解
Nov 07 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/07/09 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
2017/06/11 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
2017/06/30 PHP
解决Laravel 使用insert插入数据,字段created_at为0000的问题
2019/10/11 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
不使用中间变量,交换int型的 a, b两个变量的值。
2010/10/29 Javascript
50款非常棒的 jQuery 插件分享
2012/03/29 Javascript
常用DOM整理
2015/06/16 Javascript
js正则表达式中exec用法实例
2015/07/23 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
2016/10/14 Javascript
使用JavaScript获取URL中的参数(两种方法)
2016/11/16 Javascript
微信小程序开发之入门实例教程篇
2017/03/07 Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
2017/04/13 Javascript
详解Angular2 关于*ngFor 嵌套循环
2017/05/22 Javascript
JavaScript实现购物车基本功能
2017/07/21 Javascript
使用webpack-dev-server处理跨域请求的方法
2018/04/18 Javascript
JS实现动态生成html table表格的方法分析
2018/07/11 Javascript
vue中使用sessionStorage记住密码功能
2018/07/24 Javascript
vue升级之路之vue-router的使用教程
2018/08/14 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
小程序实现新用户判断并跳转激活的方法
2019/05/20 Javascript
js实现购物车商品数量加减
2020/09/21 Javascript
Python的类实例属性访问规则探讨
2015/01/30 Python
Python制作Windows系统服务
2017/03/25 Python
python json 递归打印所有json子节点信息的例子
2020/02/27 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
2020/05/18 Python
澳大利亚在线批发商:Simply Wholesale
2021/02/24 全球购物
实现strstr功能,即在父串中寻找子串首次出现的位置
2016/08/05 面试题
环境工程大学生自荐信
2013/10/21 职场文书
淘宝客服自我总结鉴定
2014/01/25 职场文书
公证书样本
2014/04/10 职场文书
某集团股份有限公司委托书样本
2014/09/24 职场文书
自荐信大全
2019/03/21 职场文书
Python+uiautomator2实现自动刷抖音视频功能
2021/04/29 Python
mysql在项目中怎么选事务隔离级别
2021/05/25 MySQL
关于python爬虫应用urllib库作用分析
2021/09/04 Python