我有一个数据数组(lanes
),它本身包含一个数组(timePeriods
):
lanes: [{
lane: 'Lane 1',
timePeriods: [{
start: '08:00',
end: '08:15',
trays: Math.floor(Math.random() * 6) + 1
}, {
start: '08:15',
end: '08:30',
trays: Math.floor(Math.random() * 6) + 1
}, {
start: '08:30',
end: '08:45',
trays: Math.floor(Math.random() * 6) + 1
}, {
start: '08:45',
end: '09:00',
trays: Math.floor(Math.random() * 6) + 1
}]
},
...
]
我想要做的是以表格格式显示,但是我不确定如何正确排列列和行?我可能需要嵌套表吗?
我创建了一个jsfiddle,但只输出trays
的静态数字,而不是trays
的实际值,因为我不确定如何:http://jsfiddle.net/boe5u2sj/
答案 0 :(得分:3)
您可以使用一个<table>
来完成,只需在显示数据之前重新排列数据。
由于你要遍历每一行,所以如果你像这样的数据(例如),那就更容易了:
{
"08:00-08:15": {
"Lane 1": {
"trays": 1
},
"Lane 2": {
"trays": 6
}
},
"08:15-08:30": {
"Lane 1": {
"trays": 4
},
"Lane 2": {
"trays": 5
}
},
...
为了做到这一点,请使用以下内容:
vm.rep = {};
_.forEach(vm.report.lanes, function(lane) {
_.forEach(lane.timePeriods, function(timePeriod) {
var time = timePeriod.start + "-" + timePeriod.end;
if (vm.rep[time] == null) {
vm.rep[time] = {};
}
vm.rep[time][lane.lane] = { trays: timePeriod.trays };
});
});
然后,在HTML上:
<table class="table">
<thead>
<tr>
<th><!-- time periods --></th>
<th ng-repeat="lane in vm.lanes">{{lane}}</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="(time, lanes) in vm.rep">
<td>{{time}}</td>
<td ng-repeat="(key, lane) in lanes">{{lane.trays}}</td>
</tr>
</tbody>
</table>
<强> jsFiddle 强>
答案 1 :(得分:0)
单个表应该足够了,但代码可能相当混乱/乏味。如果放入该数组的数据是在某种循环中生成的,那可能会简单得多,因为您可以使用相同的循环将数据放入表中。 HTML需要这样的东西:
<table id="tbl"></table>
您的JavaScript需要访问该表:
var tabl, rows=[], data=[]; //extra variables used farther down
tabl=document.getElementById("tbl");
填充数组的循环需要创建表行和表数据元素,并在填充数组的同时半填充它们(假设索引变量“i”和“j”在这里):
rows[i]=document.createElement("tr"); //table-row element
tabl.appendChild(rows[i]);
data[j]=document.createElement("td"); //table-data element
data[j].innerHTML=" "; //top-left corner of table, blank/space, when i=0 and j=0
rows[i].appendChild(data[j]);
您将增加“j”并修改第一个表行中所需的每个数据项的innerHTML数据,从数组中获取数据(或者在将数据放入数组的同时将其应用于innerHTML数组,如果数组是在循环中生成的)。对于第二行,当i = 1时,您希望第一个数据项(j = 0)innerHTML是从数组中拉出的时间,连字符,以及从数组中拉出的另一个时间。第二个数据项的innerHTML将是您的“托盘”数字之一。等等。只需记住使用appendChild将每一行追加到“tabl”,并使用appendChild将数据项追加到当前行。 (嗯......我可能会向后倾斜;你可能必须在将它附加到表格之前填写该行,以确保所有附加物实际上成为表格的一部分。)最后,只要有相同的一部分每行数据项的数量,当浏览器在网页上显示只有一个构造的表时,一切都应该合理地对齐。 (如果需要,可以在将数据元素附加到行元素之前指定“样式”信息。)
如果不使用循环,则需要构造整个HTML表,为每个table-data元素分配唯一的“id”。然后,您的JavaScript必须为每个表数据元素执行getElementById(),并为其分配适当的innerHTML值。凌乱而乏味!