为何DataTable突然无法识别fnDestroy()函数?
解决DataTables报错
fnDestory() is not a function的问题 我来帮你分析下这个突然出现的问题——虽然你用的是DataTables 1.10.15版本(理论上兼容旧API),但报错的核心原因是API调用方式的冲突,下面给你具体的解决思路和方案:
问题根源
DataTables 1.10+版本同时支持新旧两套API体系:
- 旧API(比如
fnDestroy())是挂载在jQuery对象上的,需要通过$('#tblServicesReport').dataTable()(注意是小写的dataTable)获取实例 - 新API(比如
destroy())是通过$('#tblServicesReport').DataTable()(大写的DataTable)返回的专属API实例调用的
你代码里用了DataTable().fnDestroy(),相当于在新API实例上去调用旧方法,自然会提示方法不存在。
解决方案
方案1:改用新API的destroy()方法(推荐)
这是1.10+版本的标准用法,更稳定且符合官方推荐:
// 先获取表格实例并销毁 var table = $('#tblServicesReport').DataTable(); table.destroy(); // 重新初始化表格 $('#tblServicesReport').DataTable({ dom: 'Bfrtip', buttons: [ 'copyHtml5', 'excelHtml5', 'csvHtml5', { extend: 'pdfHtml5', title: 'Services Report (' + $('#FromDate').val() + ' - ' + $('#ToDate').val() + ')', customize: function(doc) { doc.styles.title = { color: 'gray', fontSize: '15', alignment: 'center' } doc.content[1].table.widths = Array(doc.content[1].table.body[0].length + 1).join('*').split(''); doc.styles.tableHeader.fontSize = 10; doc.styles.tableHeader.alignment = 'left'; doc.styles.tableHeader.color = 'white' } }, { extend: 'print' } ] });
方案2:兼容旧API写法(适配你的原有逻辑)
如果你想继续使用fnDestroy(),需要切换到旧的实例获取方式:
// 注意这里用dataTable()而非DataTable(),获取jQuery实例 var table = $('#tblServicesReport').dataTable(); if (table.length) { table.fnDestroy(); } // 重新初始化可以保留原有写法 $('#tblServicesReport').DataTable({ // 你的配置内容... });
为什么之前正常现在突然报错?
可能的触发场景:
- 页面加载逻辑变更,导致调用销毁方法时表格还未完成初始化(此时
DataTable()返回的实例不完整) - 浏览器缓存的DataTables脚本被意外更新,或者依赖的资源版本发生了变更
- 其他页面脚本修改了jQuery对象或DataTables的原型链,导致旧方法无法被正常调用
内容的提问来源于stack exchange,提问作者user9677867
相关产品推荐
相关产品推荐

