如何从DOM表格对象获取DataTable实例并绑定draw事件?
如何从DOM表格对象获取DataTable实例并绑定draw事件
你可以通过DataTables提供的API从已初始化的表格DOM对象获取实例,以下是正确的实现方式,以及你之前代码的问题说明:
正确获取DataTable实例的方法
DataTables提供了两种可靠的方式获取已存在的实例:
方法1:使用$.fn.dataTable.fnGetInstance()
这个方法可以直接通过表格的DOM元素或选择器获取已初始化的实例:
// 通过DOM元素获取 var tableEl = document.getElementById('myTable'); var dtInstance = $.fn.dataTable.fnGetInstance(tableEl); // 或者通过jQuery选择器获取 var dtInstance = $.fn.dataTable.fnGetInstance('#myTable'); // 确认实例存在后绑定draw事件 if (dtInstance) { dtInstance.on('draw', function() { console.log('Redraw occurred at: ' + new Date().getTime()); }); }
方法2:使用$(selector).DataTable()(大写D)
注意这里是大写D的DataTable()方法,它会返回已有的实例,而不会重新初始化表格(如果表格已经被初始化过):
var dtInstance = $('#myTable').DataTable(); dtInstance.on('draw', function() { console.log('Redraw occurred at: ' + new Date().getTime()); });
你之前代码无效的原因
- 实例获取方式错误:直接访问DOM元素的
dataTable属性不是DataTables暴露实例的标准方式,新版本中该属性可能不存在或指向非实例对象。 - 事件绑定方式错误:DataTables触发的
draw事件带有.dt命名空间,你直接绑定draw事件无法捕获到DataTables的触发动作。如果不想通过实例绑定,也可以直接用jQuery绑定带命名空间的事件:
$('#myTable').on('draw.dt', function() { console.log('Redraw occurred at: ' + new Date().getTime()); });
内容的提问来源于stack exchange,提问作者Viscountess of the Junkyard
相关产品推荐
相关产品推荐

