我有一张桌子,希望使其更加动态。 例如,如何将此代码更改为动态表。
“当前版本和修订日期”列的示例。
如果当前版本和修订日期包含数据,则会创建另一列以使其为3或4,依此类推,当前版本 >和修订日期列。
“备注”列示例。
如果备注列中有数据,请在备注列中添加另一列,分别为1st,2nd,3rd,4th ...,依此类推。
请参见下面的示例输出。
<table border="2" style="width:100%;">
<thead>
<tr>
<th rowspan="2">ID</th>
<th rowspan="2">Document Name</th>
<th rowspan="2">Document ID</th>
<th>Current Version</th>
<th>Current Version</th>
<th colspan="2">Remarks</th>
<th rowspan="2">Signature</th>
</tr>
<tr>
<th>Revision Date</th>
<th>Revision Date</th>
<th rowspan="2">1st</th>
<th rowspan="2">2nd</th>
</tr>
</thead>
<tbody id="resultAppend">
</tbody>
</table>
<script>
var APIData = [{ Section_No: '4.1',
Document_Title: 'Sample Document Title',
Document_ID: 'QM-CI-001',
Revisions: [ { No: '01',
Approval_Date:'8/23/2017' },
{ No: '02',
Approval_Date: '3/12/2018' },
],
remarks: [ 'OK', 'OK' ],
Signature: 'Signature' }];
var trData = '';
for (var i = 0; i < APIData.length; i++) {
var obj = APIData[i];
trData += '<tr >' +
'<td rowspan="2">' + obj.Section_No + '</td>' +
'<td rowspan="2">' + obj.Document_Title + '</td>' +
'<td rowspan="2">' + obj.Document_ID + '</td>' +
'<td>' + obj.Revision_No + '</td>' +
'<td>' + obj.Revision_No + '</td>' +
'<td rowspan="2">' + obj.remarks1 + '</td>' +
'<td rowspan="2">' + obj.remarks2 + '</td>' +
'<td rowspan="2">' + obj.Signature + '</td>' +
'</tr><tr>' +
'<td>' + obj.Approval_Date + '</td>' +
'<td>' + obj.Approval_Date + '</td>' +
'</tr>';
}
document.querySelector('#resultAppend').innerHTML = trData;
</script>
答案 0 :(得分:0)
我建议您使用JsViews软件包-它非常适合您的任务。
我使用您的示例数据准备了一个示例,扩展了2行:jsfiddle
这是jsViews / jsRender模板代码:
<table border="1" style="width:100%;">
<thead>
<tr>
<th rowspan="2">ID</th>
<th rowspan="2">Document Name</th>
<th rowspan="2">Document ID</th>
{{for ~makeArray(maxVersions)}}
<th>Current Version</th>
{{/for}}
<th colspan="{{:maxRemarks}}">Remarks</th>
<th rowspan="2">Signature</th>
</tr>
<tr>
{{for ~makeArray(maxVersions)}}
<th>Revision Date</th>
{{/for}}
{{for ~makeArray(maxRemarks)}}
<th rowspan="2">{{:~getNumberWithOrdinal(#index+1)}}</th>
{{/for}}
</tr>
</thead>
<tbody id="resultAppend">
{{for rows ~maxVersions = maxVersions ~maxRemarks = maxRemarks}}
<tr>
<td rowspan="2">{{:Section_No}}</td>
<td rowspan="2">{{:Document_Title}}</td>
<td rowspan="2">{{:Document_ID}}</td>
{{for Revisions}}
<td>{{:#data.No}}</td>
{{/for}}
{{for ~makeArray(~maxVersions - Revisions.length)}}
<td></td>
{{/for}}
{{for remarks}}
<td rowspan="2">{{:#data}}</td>
{{/for}}
{{for ~makeArray(~maxRemarks - remarks.length)}}
<td rowspan="2"></td>
{{/for}}
<td rowspan="2">{{:Signature}}</td>
</tr>
<tr>
{{for Revisions}}
<td>{{:#data.Approval_Date}}</td>
{{/for}}
{{for ~makeArray(~maxVersions - Revisions.length)}}
<td></td>
{{/for}}
</tr>
{{/for}}
</tbody>
</table>
和JS:
var APIData = [
{
Section_No: '4.1',
Document_Title: 'Sample Document Title',
Document_ID: 'QM-CI-001',
Revisions: [
{ No: '01', Approval_Date:'8/23/2017' },
{ No: '02', Approval_Date: '3/12/2018' },
],
remarks: [ 'OK', 'OK' ],
Signature: 'Signature'
},
{
Section_No: '4.2',
Document_Title: 'Sample Document Title 2',
Document_ID: 'QM-CI-002',
Revisions: [
{ No: '01', Approval_Date: '3/12/2018' },
],
remarks: [ 'OK', 'OK', 'OK' ],
Signature: 'Signature2'
},
];
$.views.helpers({
getNumberWithOrdinal: function(n) {
var s=["th","st","nd","rd"],
v=n%100;
return n+(s[(v-20)%10]||s[v]||s[0]); },
makeArray: function(count) {
var array = [];
if(count) { array[count-1] = {}; }
return array;
}
});
var template = $.templates("#theTmpl");
var data = {
maxVersions: 1,
maxRemarks: 1,
rows: APIData
};
APIData.forEach(function(row){
var versions = row.Revisions.length;
if( versions > data.maxVersions) { data.maxVersions = versions; }
var remarks = row.remarks.length;
if( remarks > data.maxRemarks) { data.maxRemarks = remarks; }
});
template.link("#result", data);