如何在DataTables jQuery中循环遍历所有行?

29

我正在使用 jQuery 插件 DataTables 来构建漂亮的表格。

  var table = $('#example').DataTable({
    "data": source
});

我希望能够为表格中的每一行都创建一个条目。

不幸的是,这种方法可能已经过时,并且在新版本中无法使用(会出现错误)。

$(table.fnGetNodes()).each(function () {

});

这种方法仅对可见行有效(前10行,因为其他行已分页)

 table.each( function ( value, index ) {
    console.log( 'Data in index: '+index+' is: '+value );
} );

你知道如何循环遍历所有行吗?


你的意思是什么?你想显示所有行吗?如果是这样,你可以试试这个:var table = $('#example').DataTable({ "paging":false }); - d_unknown
谢谢回答,不,我不想显示所有行,我想在代码中动态循环遍历所有行,即使这些行被分页了。 - Pipo
也许你可以直接使用数据,我的意思是你填充在 dataTable 中的数据源。我不确定。 - d_unknown
是的,这是个好主意,但有时用户会更改init dataTable数据(我有一个系统允许用户在不重新绘制所有dataTable的情况下编辑、添加和删除行)。我想知道像第27行显示的是什么样子的东西。 - Pipo
不幸的是,这种方法可能已经过时,不能与新版本一起使用(它会引发错误)。它抛出了什么错误? - Nico
未捕获的类型错误:未定义的函数。 - Pipo
4个回答

44

我终于找到了:

 var data = table.rows().data();
 data.each(function (value, index) {
     console.log(`For index ${index}, data value is ${value}`);
 });

2
警告:这只是迭代传递给dataTables的数据本身 - 因此,您提供的任何HTML都将成为此方法中的字符串。 - starbeamrainbowlabs
1
我终于找到你了。非常感谢你的回答。 - Zeghra
如何只获取特定列的值? - natsumiyu
1
我只能获取第一页的数据。如何获取下一页? - natsumiyu

12

Datatables拥有一个迭代器用于每一行,rows().every(),其中this指向当前被迭代的行的上下文。

tableName.rows().every(function(){
    console.log(this.data());
});

3
通过这样,我们将获得当前分页的行。我如何获取所有分页数据? - Ashok Gurram

6
如果您使用的是传统的DataTables,那么您可以获取所有行,即使是分页的行,如下所示...
table.fnGetNodes(); // table is the datatables object.

因此,我们可以使用由 jQuery 提供的 .each() 方法遍历行。

jQuery(table.fnGetNodes()).each(function () {
// You can use `jQuery(this).` to access each row, and process it further.            
});

1
例如,这个数据有三个字段UserID、UserName和isActive,我们只想显示活跃用户。下面的代码将返回所有行。
var data = $('#myDataTable').DataTable().rows().data();

我们只打印活跃用户。
data.each(function (value, index) {
  if (value.isActive)
  {
     console.log(value.UserID);
     console.log(value.UserName);
  }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接