我正在使用jQuery的DataTables插件,但在尝试使用fnDestroy方法时出现以下错误:
Undefined
我尝试过使用以下所有变体:
1)
$('#data').dataTable().fnDestroy();
2)
var dt = $('#data').dataTable();
dt.fnDestroy();
3)
var data = document.getElementById('data');
data.fnDestroy();
'data'对象存在 - HTML如下:
<div class="resultset">
<table class="display" id="data">
<tbody>
</tbody>
</table>
</div>
DataTable是使用Javascript构建的(此处未显示),但基础对象是硬编码的。
API文档显示第二种方法应该有效:
$(document).ready(function() {
// This example is fairly pointless in reality, but shows how fnDestroy can be used
var oTable = $('#example').dataTable();
oTable.fnDestroy();
} );
修改
DataTable显示正常,否则效果很好。当我尝试执行此功能时会出现问题。
答案 0 :(得分:14)
这似乎是......
之间的区别_table = jQuery('table#fp-table-table').dataTable(); // .fnDestroy() works
和
_table = jQuery('table#fp-table-table').DataTable(); // .fnDestroy() doesn't work
DataTable 似乎是针对对象的API调用而 dataTable 似乎是初始化方法。
在我的项目中,我更改了初始化以使用DataTable而不是dataTable来执行过滤任务。在此之后我的AJAX重新加载会抛出'undefined'错误,所以我把它改回来了......我很好。
答案 1 :(得分:1)
如果您转到http://www.datatables.net/manual/installation并向下滚动,则会看到以下内容:
“升级说明: 如果要从DataTables 1.9或更早版本升级,您可能会注意到资本D用于在此处初始化DataTable。 $()。DataTable()返回一个DataTables API实例,而$()。dataTable()也将初始化一个DataTable,但返回一个jQuery对象。
有关详细信息,请参阅API手册。
答案 2 :(得分:0)
您确定在fnDestroy
内运行document.ready
吗?
也许你得到了未定义的错误,因为dom还没有正确加载?
这也可能意味着你的桌子不正确,但我必须能够确定这一点。
看看这个使用你的第二个选项的小提琴,并完美地运行:http://jsfiddle.net/timsommer/m5sZU/2/
答案 3 :(得分:0)
从数据表1.10手册:
重要的是要注意$(selector).DataTable()和$(selector).dataTable()之间的区别。前者返回DataTables API实例,后者返回jQueryJS对象。将一个api()方法添加到jQuery对象中,以便您可以轻松访问API,但jQuery对象可用于操作表节点,就像使用任何其他jQuery实例一样(例如使用addClass()等。 )。
所以你可以使用DataTable()但是你需要使用_table.api()。fnDestroy();好像。
答案 4 :(得分:0)
您可以尝试
table.destroy()
在我的情况下有效