代码之家  ›  专栏  ›  技术社区  ›  nicolallias

DataTable实例获取HTML元素ID

  •  1
  • nicolallias  · 技术社区  · 6 年前

    上下文:

    我正在同时使用多个数据表(同一页)。我将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 )
    

    看起来更轻但更丑。

    好的做法是什么?我知道应该害怕全球性的vars,但我有点被它困住了(维护旧网站)。

    2 回复  |  直到 6 年前
        1
  •  2
  •   davidkonrad    6 年前

    你可以用 $.fn.dataTable.tables() . 这是香草味的 NodeList 已初始化为数据表的所有表元素中的一个。例如,在你的情况下

    console.log( $.fn.dataTable.tables()[0].id );
    

    会回来的 mytableOne . 所以重复一下这个NodeList,你就可以得到 id 的。完美的全球阵列替代品。例如,如果您的表 身份证件 是用一个不知道的时间戳或唯一随机数动态创建的。

    可以在未知表上使用API 身份证件 这样地:

    var temp = $('#'+$.fn.dataTable.tables()[0].id).DataTable();
    temp.row.add(['a','b','c']).draw();
    
        2
  •  2
  •   maxence51    5 年前

    如果您已经拥有dataTable实例,则可以尝试执行以下操作:

    myDataTable.context[0].sTableId