有没有办法找到页面中的表格是dataTable对象?

Posted

技术标签:

【中文标题】有没有办法找到页面中的表格是dataTable对象?【英文标题】:Is there a way to find that a table in page is a dataTable object? 【发布时间】:2012-02-14 14:24:00 【问题描述】:

我正在寻找一种方法来了解页面中的表格是否为 dataTable?有没有简单的方法可以找到它?或者如果我可以获得dataTable的所有对象。

【问题讨论】:

【参考方案1】:

DataTables 插件中有一个静态方法,所以你可以验证为:

$('table').each(function() 
    // this method accepts the DOM node (table element) as parameter
    if ( $.fn.dataTable.fnIsDataTable(this) ) 
         // do your thing to the table
    
);

【讨论】:

【参考方案2】:

可以一举获得页面上所有属于DataTables的表格。 DataTables 1.10 的代码是:

$.fn.dataTable.tables()

这是doc。这将返回一个 DOM 元素 数组。如果你想获取与之关联的 DataTable API 实例,你可以这样做:

var tables = $.fn.dataTable.tables();
var datatables = $(tables).DataTable();

请注意,尽管像上面那样调用.DataTable() 可以创建一个新的DataTable API 实例并因此初始化您的表,如果调用该方法的DOM 元素已经 有自己的实例(API 已经创建并初始化),调用将不会创建新实例。换句话说,上面的代码不会重新初始化你的表。

这里的datatables 对象是一个API 实例,用于控制整个表集合。在此实例上调用 API 函数将一次控制所有表。改编自文档中的示例,此代码:

datatables.page('next').draw(false);

将使所有表格跳转到它们的下一页(如果存在)。

在 1.10 之前的版本中,等效函数为 $.fn.dataTable.fnTables

Roy Ling 提到$.fn.dataTable.fnIsDataTable 可以用来单独测试表。当然,在 1.10 中仍然可以在需要的时候单独测试表,函数是$.fn.dataTable.isDataTable

【讨论】:

【参考方案3】:
if($('table').parents('.dataTable_wrapper').length>= 1) 
 do something...

这有点小技巧,但还没有一种本地方法来检查数据表实例。这是我昨天碰巧学到的。

【讨论】:

这种破解方法可行,但我正在寻找更强大的解决方案。 该解决方案来自数据表论坛上的这个线程,datatables.net/forums/discussion/7748/…,答案来自数据表的创建者本人,所以不幸的是,我认为没有很多其他方法可以完成它。 我实际上是在寻找 dataTable 对象,以便可以在其上调用一些函数。 感谢您的解决方案。但我认为目前没有办法找到它。 @Roy Ling 的回答中提到,添加了一个新的静态 API。应该使用这个 API。【参考方案4】:

我知道这个问题发布可能已经有一段时间了,但是当我自己问同样的问题时,我从 DataTable 参考site 找到了这个解决方案。

以下是检查#example 是否为DataTable 的方法。如果没有,初始化:

if ( ! $.fn.DataTable.isDataTable( '#example' ) ) 
    $('#example').dataTable();

希望这对某人有所帮助!

【讨论】:

以上是关于有没有办法找到页面中的表格是dataTable对象?的主要内容,如果未能解决你的问题,请参考以下文章

第二次渲染后表格列宽发生变化 - JQuery DataTables

关于DataTable序列化的事儿

DataTables PDF 导出单元格填充

DataTables.js - 表格在页面加载时未加载初始 100% 全宽

datatable 解决字段不一致的情况

如何将 HTML 表格内容提取到 DataTable