问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用JS把json格式转化为表格的形式显示出来

发布网友 发布时间:2022-05-02 00:21

我来回答

2个回答

懂视网 时间:2022-05-14 18:44

本篇文章给大家带来的内容是关于js中根据json生成html表格的方法介绍(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

之前公司有一个需求是:通过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"}),输出<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);

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

<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>

效果:

语文数学英语
808990
合计259

热心网友 时间:2022-05-14 15:52

json解析出来是数组,你就用
html = ‘’;
html += '<table>';
for(var i = 0; i<length ;i++){
html += '<tr><td>内容1</td><td>内容2</td><td>内容3</td></tr>‘;
}

html += '</table>';

然后把html输出到页面上
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
5数字寓意是什么意思 如何在 iPhone14上恢复已删除的照片? 红井源 醇香胡麻油 2.5L-购买最佳价格 python如何实现修改当前文件夹下所有文件名称? python遍历输出所有文件 用Python遍历指定文件夹下所有文件 Python:读取指定路径下的文件,含子文件夹,可指定文件类型 谁有治疗网瘾的好方法? 孩子有网瘾又叛逆怎么办 退伍证名字错了怎么办 我初二 求寒假作文2篇 关于js json输出来的格式 寒假作文2篇什么类型都可以!!! 两篇寒假作文? apex编译着色器怎么解决? 用手机美拍怎么上传视频到淘宝 寒假作文2篇 900字左右的 ue显示编译着色器是什么意思 给我两篇关于寒假的作文,尽量快,大神们,感谢啊 急需寒假作文2篇 玉门关的文化ip是什么 传统文化项目中福文化IP项目开发的优势是什么? 如何建立知识产权培训公司的企业文化!如愿景、使命、价值观、口号等!跪求高手解答! 被对方好友拉黑怎样恢复? 灰鸽子中 ip文件内容:是什么意思? IP和品牌的关系有什么联系,有没有简单易懂的解释啊? .ip是什么文件 IP文件是什么 网文IP是什么意思 ip向小说是什么 javascript中怎么循环提取文本框内容,做成json格式传送到新窗口显示... 如何用js(jQuery)动态输出json数据 js处理json分类遍历输出? json内容,该如何循环输出(JS) idea 怎么debug scala 共鸣のtrue force罗马音 100悬赏英文翻译.要演讲的.谢谢.不要用网络上的翻译 翻译成英文! 拜托 我的演讲稿! 谁能告诉我一些电脑上 开始 运行 的常用命令 急,求以下英语翻译,万分感激各位,重酬!小弟日后必定报答各位的恩情,谢谢! android studio step over在哪 求精灵使的剑舞op【共鸣のTure Force】罗马音 求 共鸣のtrue force中文音译歌词..罗马音也可以 谁知道step by step3听力下载? 同一个开放式基金,为什么在不同证券公司的股票软件上的代码不一样? 天津渤海证券怎么买卖创业板股票 用手机版渤海证券交易账号要12位,我只有8位? 渤海证券怎么买入新三板股票 (电信)无线网卡的收费有哪些套餐以及收费标准? php快速开发网站 用什么框架