javascript - 使用 json 创建单个 html 表

标签 javascript jquery html

expected table in this format

此脚本生成 4 个 jquery ui 选项卡,其中包含 4 个 html 表,

我如何将这些表格组合成一个表格,附上最终表格的屏幕截图。

var data = $.parseJSON("{\"version\":\"5.2\",\"user_type\":\"online\",\"user\":[{\"name\":\"John\",\"id\":50},{\"name\":\"John\",\"id\":51},{\"name\":\"John\",\"id\":57},{\"name\":\"John\",\"id\":98}]}");

const setTables = new Set();
$.each(data.user, function(key, value) {
let table;
var row = $("<tr/>");

if ($('table#main_table_' + value.id).length)
    table = $("#main_table_" + value.id);
else
    table = $('<table class="table table-responsive table-hover table-bordered"></table>');
    table.attr('id', 'main_table_' + value.id);

row.append($("<td/>").text(value.name));
row.append($("<td/>").text(value.id));

table.append(row);

if(!setTables.has(value.id)) {
    table.append( $("<thead><tr><th>NAME</th><th>ID</th></tr></thead>") );
    setTables.add(value.id);
    $( "#ul-tabs" ).append("<li><a href=\"#tabs-"+ value.id +"\">"+value.name+"</a></li>");
    $( "#tabs" ).append("<div id=\"tabs-"+value.id+"\">"+table.prop('outerHTML')+"</div>");
}
});

$( "#tabs" ).tabs();

View fiddle .

最佳答案

我重构了您的代码来实现这一目标。

var data = $.parseJSON("{\"version\":\"5.2\",\"user_type\":\"online\",\"user\":[{\"name\":\"John\",\"id\":50},{\"name\":\"John\",\"id\":51},{\"name\":\"John\",\"id\":57},{\"name\":\"John\",\"id\":98},{\"name\":\"XYZ\",\"id\":1},{\"name\":\"XYZ\",\"id\":50},{\"name\":\"XYZ\",\"id\":45},{\"name\":\"XYZ\",\"id\":98}]}");

let names = data.user.map(i => i.name)
  .filter((el, i, a) => a.indexOf(el) == i);
  
function idsForName(name, array) {
	return array.filter(el => el.name === name).map(el => el.id);
}

let $table = $('<table class="table table-responsive table-hover table-bordered"></table>');

$table.attr('id', 'main_table');

let $thead = $("<thead/>");
let $tbody = $("<tbody/>");
let $hRow = $("<tr/>").addClass('head-row');

if(names.length) $hRow.append($("<th/>").text('NAME'));

names.forEach(el => {
	let $row = $("<tr/>");
  $row.append($("<td/>").text(el));
  let ids = idsForName(el, data.user);
  ids.forEach((id, index) => {
  	let th = '.th-' + index;
		if(!$hRow.find(th).length) $hRow.append($("<th/>").addClass('th-' + index).text('ID'));
		$row.append($("<td/>").text(id));
	});
	$tbody.append($row);
});
$thead.append($hRow);

$table.append($thead).append($tbody);
$('#tabs').append($table.prop('outerHTML'))
body{
    margin: 20px;
  }
  th {
    text-align: center;
  }
  td {
    text-align: center;
  }
  table {
    border-collapse: separate;
  }
  .table-responsive {
    width: 100%;
  }
  div#export_excel {
      float: right;
      padding-right: 20px;
      padding-top: 4px;
  }
  button#btnExport {
      text-transform: uppercase;
      font-weight: 100; 
  }
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="tabs">

</div>

关于javascript - 使用 json 创建单个 html 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46425923/

相关文章:

html - type=number 时占位符显示的奇怪行为 - Firefox

javascript - 我需要什么 JS 代码和 CSS 才能在用户 “mouses-over” 菜单时更改图像?

javascript - 向左展开显示内容的输入框

jquery - 如何将文件输入按钮放置在文本字段内的右侧

javascript - 如何在我的 HTML 中使用来自外部 .js 文件的变量?

jquery - 将 css 动态添加到第 4 至 6 行

javascript - 捕获跨源 iframe 事件

jquery - 从 div 触发花式框?

javascript - 使用 jQuery 查找正确的选择器

javascript - 在 react native 矢量图标中按下时如何更改图标名称