我正在同时玩多个DataTable(同一页)。我将DataTables对象保留为全局变量,例如
window.table_one = $('#mytableOne').DataTable( options );
[...]
window.table_two = $('#theirTableTwo').DataTable( options2 );
正如我在https://datatables.net和stackoverflow上所能找到的,DataTables不允许获取在其上调用DataTables的HTML元素表的ID。
幸运的是,我们可以从DataTables对象中使用jQuery,因此可以获取ID:
window.table_one.$('tr').closest('table').attr('id')
但是像这样调用jQuery感觉就像用罐子将草莓捣碎,您有更简便的方法吗?
我的另一个想法是将DataTables实例与html ID一起保留在全局“数组”中。例如
window.tables = {
'mytableOne': $('#mytableOne').DataTable( options )
}
[...]
window.tables[ '#theirTableTwo' ].DataTable( options2 )
看起来更轻巧但更丑陋。
有哪些好的做法?我知道应该担心使用全球var,但是我有点坚持(维护旧网站)。
答案 0 :(得分:2)
您可以使用$.fn.dataTable.tables()
。这将返回已初始化为DataTable的所有表元素的原始NodeList
。例如,根据您的情况
console.log( $.fn.dataTable.tables()[0].id );
将返回mytableOne
。因此,遍历该NodeList即可获得所有id
(或DOM节点)。全局阵列的完美替代品。例如,如果您的表id
是动态创建的,且带有时间戳或您不知道的唯一随机数,那么这也可能很有用。
您可以像这样在未知表id
上使用API:
var temp = $('#'+$.fn.dataTable.tables()[0].id).DataTable();
temp.row.add(['a','b','c']).draw();
答案 1 :(得分:2)
如果您已经有dataTable实例,则可以尝试以下操作:
myDataTable.context[0].sTableId