DataTable实例获取HTML元素ID

时间:2018-07-31 13:56:23

标签: jquery datatables

上下文:

我正在同时玩多个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,但是我有点坚持(维护旧网站)。

2 个答案:

答案 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