【问题标题】:Access DataTables API using the table's id使用表的 id 访问 DataTables API
【发布时间】:2023-03-22 23:24:01
【问题描述】:

我使用 jQuery UI 选项卡。我在每个新选项卡中都有一个 DataTable。我想将在对话框中选择的行添加到当前选项卡中的表中。
因为我在标签内有这些表,其名称与我用于标签的相同编号(例如“tabs-1”将包含表“choice1”)我宁愿每次需要添加行时都找到所需的表而不是存储所有这些表集合中的变量。
如果您确切地知道在初始化时访问已经初始化的 DataTables 而不存储在变量中是不可能,请建议一种存储方法,因为我唯一想到的是一个对象键是包含选项卡名称的字符串,值是表变量。而且我不确定这是不是最好的方法。
这是我现在尝试的:

var id = '#choice' + $("#tabs ul>li a").eq(tabs.tabs('option', 'active')).attr('href').slice(-1);
$(id).row.add( dialogTable.rows({ selected: true }).data() ).draw();

所以,即使我注释第一行并硬编码“#choice1”,它仍然会产生错误TypeError: $(...).row is undefined

【问题讨论】:

    标签: jquery datatable tabs jquery-selectors


    【解决方案1】:

    您必须在 DataTables API 实例上调用 .row()而不是在 jQuery 表对象上。

    调用.DataTable() 将初始化一个数据表并返回一个API 实例。如果表已经初始化,它只会返回实例。

    From the docs:

    访问 API

    可以通过以下三种不同方式之一为一个或多个表获取新的 DataTables API 实例:

    • $(选择器).DataTable();

    • $(选择器).dataTable().api();

    • 新的$.fn.dataTable.Api(选择器);

    每个结果都是 DataTables API 对象的一个​​实例,其中包含选择器在其上下文中找到的表。

    这将为您提供所需的行:

    $(id).DataTable().row()
    

    因此,这应该有效:

    $(id).DataTable().row.add(dialogTable.rows({ selected: true}).data() ).draw();
    

    【讨论】:

    • @mekkanizer 您确定不是dialogTable.rows 位导致了该错误吗? dialogTable 也需要是一个 API 实例。我敢打赌不是
    • @mekkanizer 你能用你的完整代码制作一个 jsFiddle,这样我就可以更仔细地查看表格了吗?
    • 上帝,原谅我的愚蠢......一切都很好,只是错过了DataTables之后的()......
    • 是的,但是使用当前 DataTable 的版本,此代码将第二次初始化表,然后返回一个 api 实例。
    猜你喜欢
    • 2014-11-22
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-18
    • 2019-09-20
    • 2013-10-08
    • 2018-03-26
    相关资源
    最近更新 更多