如何销毁数据表?
我正在使用数据表并使用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 } ); } ); });
希望它会有所帮助