如何销毁数据表?

我正在使用数据表并使用bootstrap-daterangepicker来选择数据将在Datatables中显示的范围。

它工作正常。

问题是当我在daterangepicker中选择一个新范围时,它为我提供了一个回调函数,我可以在其中完成我的工作。 在那个回调函数中,我再次调用Datatables。 但是由于该表已经被创建,我如何销毁上一个表并在其中显示一个新表?

请帮助。 我被卡住了。 🙁

编辑:我有以下代码:

$(element).daterangepicker({options}, function (startDate, endDate) { //This is the callback function that will get called each time $('#feedback-datatable').dataTable({ "sDom": "<'row-fluid'r>t<'row-fluid'>", "sPaginationType": "bootstrap", "oLanguage": { "sLengthMenu": "_MENU_ records per page", "oPaginate": { "sPrevious": "Prev", "sNext": "Next" } }, "aoColumnDefs": [{ 'bSortable': false, 'aTargets': [2,4] }], "bAutoWidth": false, "aoColumns": [ {"sWidth": "20%"}, {"sWidth": "15%"}, {"sWidth": "45%"}, {"sWidth": "15%"}, {"sWidth": "5%"} ] }); } 

要使用DOM元素完全删除和删除datatable对象,您需要:

 //Delete the datable object first if(oTable != null)oTable.fnDestroy(); //Remove all the DOM elements $('#feedback-datatable').empty(); 

只需将此参数添加到您的声明:

  “bDestroy”:是的, 

然后,只要您想“重新创建”表,它就不会丢失错误

PS您可以创建一个函数来获取所需的参数,然后在运行时使用不同的选项重新初始化表。

例如,我在我的程序中使用这个,如果它可以帮助您根据您的需要进行调整

  initDataTable($('#tbl1'),2,'asc',false,false,25,false,false,false,'landscape',rptHdr);  / *初始化表* / 
 / * ----------------------数据表初始化------------------------ --- * /
 / *
  * @ $ table初始化的表ID
  * @sortCol最初将进行分类的列号 
  * @sorOrder Ascendant(asc)或Descendant(desc)
  * @enFilter布尔值,用于启用或不启用filter选项
  * @enPaginate布尔值,用于启用或不启用filter选项
  * @dplyLength启用分页时每页包含的记录数
  * @enInfo显示或不显示记录信息的布尔值
  * @autoWidth布尔值,用于启用或不启用表自动宽度
  * @enTblTools布尔值,以启用或不启用表工具addin
  * @pdfOrientation pdf文档的页面方向(横向,纵向)(必需的enTblTools ==启用)
  * @fileName输出文件命名(必需的enTblTools ==启用)

  / * ------------------------------------------------ ------------------------------ * /  
 function initDataTable($ table,sortCol,sortOrder,enFilter,enPaginate,dplyLength,enInfo,autoWidth,enTblTools,pdfOrientation,fileName){

     var dom =(enTblTools)?  'T':'';

     var oTable = $ table.dataTable({
         “命令”:[
             [sortCol,sortOrder]
         ]
         “bDestroy”:是的,
         “bProcessing”:是的,
         “dom”:dom,
         “bFilter”:enFilter,
         “bSort”:是的,
         “bSortClasses”:是的,
         “bPaginate”:enPaginate,
         “sPaginationType”:“full_numbers”,
         “iDisplayLength”:dplyLength,
         “bInfo”:enInfo,
         “bAutoWidth”:autoWidth,
         “tableTools”:{
             “aButtons”:[{
                     “sExtends”:“copy”,
                     “sButtonText”:“复制”,
                     “bHeader”:是的,
                     “bFooter”:是的,
                     “fnComplete”:function(nButton,oConfig,oFlash,sFlash){
                         $()。shownotify('showNotify',{
                             text:'表复制到剪贴板(无格式化)',
                            粘:假,
                            位置:'中间中心',
                            类型:'成功',
                             closeText:''
                         });
                     }
                 },{
                     “sExtends”:“csv”,
                     “sButtonText”:“Excel(CSV)”,
                     “sToolTip”:“另存为CSV文件(无格式化)”,
                     “bHeader”:是的,
                     “bFooter”:是的,
                     “sTitle”:fileName,
                     “sFileName”:fileName +“。csv”,
                     “fnComplete”:function(nButton,oConfig,oFlash,sFlash){
                         $()。shownotify('showNotify',{
                             text:'CSV文件保存在选定位置。',
                            粘:假,
                            位置:'中间中心',
                            类型:'成功',
                             closeText:''
                         });
                     }
                 },{
                     “sExtends”:“pdf”,
                     “sPdfOrientation”:pdfOrientation,
                     “bFooter”:是的,
                     “sTitle”:fileName,
                     “sFileName”:fileName +“。pdf”,
                     “fnComplete”:function(nButton,oConfig,oFlash,sFlash){
                         $()。shownotify('showNotify',{
                             text:'PDF文件保存在选定位置。',
                            粘:假,
                            位置:'中间中心',
                            类型:'成功',
                             closeText:''
                         });
                     }
                 },
                 {
                    “sExtends”:“其他”,
                    “bShowAll”:是的,
                    “sMessage”:fileName,
                    “sInfo”:“请完成时按下”
                 }
             ]
         }
         / *“fnDrawCallback”:function(oSettings){alert('DataTables重绘了表');} * /
     });
     / *如果是IE则避免设置粘贴头* /
     if(!navigator.userAgent.match(/ msie / i)&& enPaginate == false){
         new $ .fn.dataTable.FixedHeader(oTable);
     }

    返回oTable
 }

伊万。

我知道这是一个老问题,但是因为我碰到了类似的问题并解决了它。

以下应该做的伎俩(评论来自DataTable API文档 )。

 // Quickly and simply clear a table $('#feedback-datatable').dataTable().fnClearTable(); // Restore the table to it's original state in the DOM by removing all of DataTables enhancements, alterations to the DOM structure of the table and event listeners $('#feedback-datatable').dataTable().fnDestroy(); 

对于DataTables 1.10,调用是:

 // Destroy dataTable $('#feedback-datatable').DataTable.destroy(); // Remove DOM elements $('#feedback-datatable').empty(); 

对于谷歌搜索者

我很难设法破坏Datatable ,在加载新数据并重新初始化Datatable之前清空所有以前的数据,这样做,

 if ($.fn.DataTable.isDataTable("#myTbl")) { ("#myTbl").DataTable().destroy(); } $('#myTbl tbody > tr').remove(); ... // Load table with new data and re-initialize Datatable 

在DataTables 1.10及更高版本上,您可以使用"destroy": true

在这里阅读更多细节

 $('#feedback-datatable').dataTable().fnDestroy(); 

这应该破坏dataTable,然后你将不得不重新初始化dataTable。

来自DataTable

 var table = $('#myTable').DataTable(); $('#tableDestroy').on( 'click', function () { table.destroy(); }); 

从服务器重新加载完整的表描述,包括列:

 var table = $('#myTable').DataTable(); $('#submit').on( 'click', function () { $.getJSON( 'newTable', null, function ( json ) { table.destroy(); $('#myTable').empty(); // empty in case the columns change table = $('#myTable').DataTable( { columns: json.columns, data: json.rows } ); } ); }); 

希望它会有所帮助