创建一个动态表,添加依赖于JQuery或JavaScript中数据的列和行

时间:2019-02-26 01:09:41

标签: javascript jquery html

我有一张桌子,希望使其更加动态。 例如,如何将此代码更改为动态表。

“当前版本和修订日期”列的示例。

如果当前版本修订日期包含数据,则会创建另一列以使其为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>

Sample Output

1 个答案:

答案 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);