【问题标题】:dataTable() vs. DataTable() - why is there a difference and how do I make them work together?dataTable() 与 DataTable() - 为什么有区别,我如何让它们一起工作?
【发布时间】:2014-10-02 03:34:18
【问题描述】:

该插件的绝大多数文档表明您使用

对其进行初始化
$('#example').dataTable();

但是 http://www.datatables.net/examples/api/multi_filter_select.html 使用

进行初始化
$('#example').DataTable();

生成的对象差异很大,当我使用小写的“D”初始化时,上面的示例 URL 不起作用,但是几乎所有其他 需要小写的 ' D' 初始化。

有人可以向我解释为什么会有差异,以及如何让两者一起玩得很好?本质上,我需要多过滤器选择功能,但还需要附加一些其他调用/插件,这些调用/插件似乎不喜欢大写的“D”初始化。

【问题讨论】:

  • 我的理解是新的较新版本(1.10)使用DataTable,旧版本使用dataTable。 http://www.datatables.net/new/1.10,看来您可以同时使用 2 种初始化类型来访问特定版本的功能。
  • 一开始我也是这么想的,但是网站上的大多数示例都使用小写的“d”,而 1.10.2 - datatables.net/examples/basic_init/zero_configuration.html
  • 我在尝试拨打var table = $("#datatables-example").dataTable(); 然后拨打var info = table.page.info() 时遇到了同样的情况。它不起作用,因为.page.info() 仅在我们调用.Datatable() 时才起作用。正如@davidkonrad 回答的那样,当我调用var info = table.api().page.info() 时,它适用于小写的“数据表”

标签: datatables


【解决方案1】:

基本上,这两个构造函数返回不同的对象。


dataTable 构造函数

var table = $(<selector>).dataTable()

dataTable 是 oldschool dataTables 构造函数,它返回一个 jQuery 对象。这个 jQuery 对象丰富了一组匈牙利符号格式的 API 方法,例如fnFilterfnDeleteRow 等。请参阅 API 方法的完整列表 here。例子:

table.fnDeleteRow(0); 
table.fnAddData(['E', 'F']);
所有 1.9.x / 1.10.x 版本都支持

dataTable


DataTable 构造函数

var table = $(<selector>).DataTable()

DataTable 构造函数是在 1.10.x 中引入的,它返回一个巨大的 API 对象,该对象具有对页面、行、单元格等的完全读/写访问权限,请参阅 manual。等价示例:

table.row(0).remove();
table.row.add(['E', 'F']).draw();

结合dataTable和DataTable

如果您维护旧代码,或者由于某种原因需要使用 oldschool dataTable 构造函数,但仍需要使用新 API,则将 jQuery 对象扩展(从 1.10.0)使用.api() 返回新 API 的方法。等价示例:

var table = $('#example').dataTable();
table.api().row(0).remove();
table.api().row.add(['E', 'F']).draw();

table.fnDeleteRow(0) 这样的旧 API 仍然有效。因此,请注意:

基本上我需要多过滤器选择功能,但也 需要处理其他一些似乎不喜欢的调用/插件 大写的“D”初始化。

如您所见,两者都可以!以旧方式初始化 dataTables,并在需要访问新 API 时使用 .api()


为什么官方的例子这么多使用dataTable()?

好吧,您不需要使用DataTable 构造函数。如果您不使用新的 API,则没有理由使用 DataTable 构造函数。 oldschool dataTable 构造函数未被弃用。 DataTables 主要是一项人的工作。维护和开发是一项艰巨的任务,显然维护一个包含论坛、手册、大量示例等的大型网站非常耗时。这只是一个猜测,但我认为 Allan Jardine 现在只在实际需要的地方将 dataTable 更改为 DataTable,只是因为他无法一步完成所有操作。

【讨论】:

  • 他们都返回一个 jQuery 对象吗?
  • @Triynko,如上所述,!请参阅brief explanation 了解差异。或者,作为一个经验法则——如果您可以使用特定的 jQuery 方法(例如 find()attr())在 X 上工作,那么您就有了一个 jQuery 对象。 DataTable() 返回一个不是 jQuery 对象的 javascript 对象字面量,但如果您出于某种原因认为这更容易,它仍然提供使用 to$() 将您正在处理的内容转换为 jQuery 对象的方法。
  • 如果我需要更改语言怎么办?我该怎么做?我正在使用 DataTable 构造函数。
  • @Mubin,您必须使用新的语言设置重新创建 DataTable。在此之前,您需要使用 destroy: true 实例化 DataTable ...
  • @davidkonrad 我的情况是我需要动态更改语言。摧毁它对我没有帮助。
猜你喜欢
  • 2017-06-25
  • 1970-01-01
  • 2010-10-01
  • 2021-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-30
相关资源
最近更新 更多