鍍金池/ 問(wèn)答/網(wǎng)絡(luò)安全  HTML/ dataTable動(dòng)態(tài)表頭

dataTable動(dòng)態(tài)表頭

1.表頭的內(nèi)容需要根據(jù)后端返回的數(shù)據(jù)才能知道。
2.頁(yè)面首次加載數(shù)據(jù)能正常展示,而是第二次的數(shù)據(jù)通過(guò)ajax來(lái)獲取數(shù)據(jù),后端數(shù)據(jù)返回正常;且使用Datatable.clear() 清除了表中行、Datatable生成的實(shí)例也使用destroy() 銷毀了;這兩步驟下,table的表頭還是存在;此時(shí)我使用$('#example').empty() 將表頭結(jié)構(gòu)也去除了;
3.第二次需要加載的數(shù)據(jù)也順利的通過(guò)傳入到了data 和 columns 中;但是在渲染的時(shí)候就出問(wèn)題了:它還是展示首次請(qǐng)求的數(shù)據(jù);問(wèn)題在于:我調(diào)試的時(shí)候發(fā)現(xiàn)行數(shù)據(jù)被正常clear了,只是表頭數(shù)據(jù)(表結(jié)構(gòu))不能去除。
4.demo代碼如下:

 <button onclick="getData()">獲取數(shù)據(jù)</button>
 <table id="example" class="table table-bordered table-hover" style="width:100%"></table>
 
 <script type="text/javascript">
    var example = {},
        count = 0;
    var opts = {
        "scrollX": false,
        "bAutoWidth": true,
        "sDom": 'ti', // 'ftip'
        "paging": true,
        "pagingType": "full_numbers",
        "pageLength":10,
        "destroy": true,
        "language": {

            "sProcessing": "處理中...",

            "sLengthMenu": "顯示_MENU_項(xiàng)結(jié)果",

            "sZeroRecords": "沒(méi)有匹配結(jié)果",

            "sInfo": "顯示第_START_至_END_項(xiàng)結(jié)果,共_TOTAL_項(xiàng)", "sInfoEmpty": "顯示第0至0項(xiàng)結(jié)果,共0項(xiàng)",

            "sInfoFiltered": "(由_MAX_項(xiàng)結(jié)果過(guò)濾)",

            "sInfoPostFix": "",

            "sSearch": "快速查詢:",

            "sUrl": "",

            "sEmptyTable": "表中數(shù)據(jù)為空",

            "sLoadingRecords": "載入中...",

            "sInfoThousands": ",",

            "oPaginate": {

                "sFirst": "首頁(yè)",

                "sPrevious": "上頁(yè)",

                "sNext": "下頁(yè)",

                "sLast": "末頁(yè)"

            }
        }
    };
    function getData() {
        var url = count++ % 2 === 0 ? './mockdata/subque2.json' : './mockdata/subque1.json';
        $.ajax({
            url: url,
            type: 'get',
            dataType: 'json',
            success: function (res) {
                destroyDataTbl();
                opts.data = res.dataSet;
                opts.columns = res.titles;
                example = $('#example').DataTable(opts);
                example.draw();
            }
        });
    }
    function destroyDataTbl() {
        if(typeof example.destroy === 'function') {
            example.clear();
            example.destroy();
            $('#example').empty();
            example = {};
        }
    }
</script>

5.調(diào)試
首次加載:
clipboard.png

clipboard.png

展示效果

clipboard.png

第二次加載的數(shù)據(jù):
先清理數(shù)據(jù)和銷毀實(shí)例:
清理前:

clipboard.png

清理后:

clipboard.png

clear函數(shù)調(diào)用后,行內(nèi)數(shù)被清除了,但是columns 列中的數(shù)據(jù)卻一直保持;如下:

clipboard.png

開始傳入新數(shù)據(jù):

clipboard.png

這些也都o(jì)k;但實(shí)例化的結(jié)果卻還是展示首次加載的數(shù)據(jù)

6.請(qǐng)問(wèn)諸位有什么方法可以清除表結(jié)構(gòu)嗎?也沒(méi)有找到api,很多論壇上說(shuō)datable.Columns.clear()可以,但是根本不存在這個(gè)接口;麻煩大家發(fā)現(xiàn)我上面有問(wèn)題幫我指出來(lái);在這里卡了很久了,謝謝~~~~

回答
編輯回答
陌上花

//重新建表

    $('#grid_hz').remove();
    $('#div_grid_hz').html("<table id=\"grid_hz\" class=\"table table-striped table-bordered\" style=\"width:100%;\"></table>");
    
2018年3月28日 09:31