dataTable()与DataTable() - 为什么会有差异,我如何让它们一起工作?

ggu*_*erg 53 datatables

此插件的绝大多数文档都表明您使用它进行初始化

$('#example').dataTable();
Run Code Online (Sandbox Code Playgroud)

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

$('#example').DataTable();
Run Code Online (Sandbox Code Playgroud)

结果对象差别很大,当我用小写的"D"初始化时,上面的示例URL不起作用,但是其他几乎所有其他都需要小写的"D"初始化.

有人可以向我解释为什么会有差异,以及如何让两人在一起玩得很好?本质上我需要多过滤器选择功能,但也需要处理其他一些看起来不喜欢大写"D"初始化的调用/插件.

dav*_*rad 82

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


dataTable构造函数

var table = $(<selector>).dataTable()
Run Code Online (Sandbox Code Playgroud)

dataTable是oldschool dataTables constructur,它返回一个jQuery对象.这个jQuery对象富含匈牙利表示法格式的一组API方法,例如fnFilter,fnDeleteRow等等.请在此处查看完整的API方法列表.例子 :

table.fnDeleteRow(0); 
table.fnAddData(['E', 'F']);
Run Code Online (Sandbox Code Playgroud)

dataTable所有1.9.x/1.10.x版本都支持.


DataTable构造函数

var table = $(<selector>).DataTable()
Run Code Online (Sandbox Code Playgroud)

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

table.row(0).remove();
table.row.add(['E', 'F']).draw();
Run Code Online (Sandbox Code Playgroud)

结合dataTable和DataTable

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

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

旧的API table.fnDeleteRow(0)仍然有效.所以关注你:

本质上我需要多过滤器选择功能,但也需要处理其他一些看起来不喜欢大写"D"初始化的调用/插件.

如你所见,你可以做到这两点!以旧方式初始化dataTables,并.api()在需要访问新API时使用.


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

好吧,你不需要使用DataTable构造函数.如果您不使用新API,则没有理由使用DataTable构造函数.oldschool dataTable构造函数不会被弃用.DataTables主要是一个人的工作.维护和开发并且显然非常耗费时间来维护一个包含论坛,手册,大量示例等的庞大网站是一项艰巨的任务.这只是一个猜测,但我认为Allan Jardine现在只是已经改变dataTableDataTable实际需要的地方,只是因为他不能一步到位.

  • @Triynko,如上所述,**不**!有关差异,请参见[简要说明](http://stackoverflow.com/questions/6445180/what-is-a-jquery-object)。或者说,如果您可以使用特定的jQuery方法(例如,find()或attr())在X上工作,那么您就有一个jQuery对象。“ DataTable()”返回一个不是jQuery对象的javascript对象文字,但是如果出于某种原因,它仍然提供通过使用“ to $()”将您正在处理的内容转换为jQuery对象的方法。简单。 (2认同)