循环遍历 DataTables 表以获取所有单元格内容

Posted

技术标签:

【中文标题】循环遍历 DataTables 表以获取所有单元格内容【英文标题】:Loop through DataTables table to get all cells content 【发布时间】:2012-03-25 07:58:11 【问题描述】:

我正在使用 jquery dataTables 在我的网站上生成分页表。我需要运行一个从特定列中获取所有数据的进程。类似的东西:

$('.testLink').click(function()
            var cells = new Array();
            $('#myTable tr td').each(function()
                cells.push($(this).html());
            );
            console.log(cells);
        );

该示例包含所有内容,但我只需要一列 tds 中的信息。我想我可以通过向该行中的所有 tds 添加一个类来做到这一点,但我相信有更好的方法。这是一个额外的问题..

但我真正想知道的是如何让它与数据表一起使用?因为脚本隐藏了大部分表格以进行分页,所以这个函数只抓取可见的单元格。我玩过fnGetData,但我不明白。有什么想法吗?

【问题讨论】:

什么是客观的?...从 API 获取行数据并不困难,并且在巨大的下载包中可能有示例..发布详细信息和代码尝试 是的,获取数组中的所有行数据,然后我需要使用该数据来运行查询。我已经从 API 搜索和尝试了几个小时的东西,但我无法得到它,所以我想试一试。 【参考方案1】:

要访问所有行,您可以:

var rows = $("#myTable").dataTable().fnGetNodes();

在你的情况下,这应该有效:

   $('.testLink').click(function()
        var cells = [];
        var rows = $("#myTable").dataTable().fnGetNodes();
        for(var i=0;i<rows.length;i++)
        
            // Get HTML of 3rd column (for example)
            cells.push($(rows[i]).find("td:eq(2)").html()); 
        
        console.log(cells);
    );

【讨论】:

他不想要所有行。他希望每个节点都有一个特定的列。 是的!谢谢,这正是我需要的。 我可以看到这如何回答所提出的确切问题,但我想进一步想知道你想用这些做什么?原因是,在 DataTables 渲染过程中,可以使用 fnRowCallback 之类的回调来完成许多单元格(也包括行和列)操作。 但是当对任何列应用排序时,您的代码在排序之前不会给出相同的数据......我认为这是错误的...... 救了我的命!如果您在列中使用复选框来选择行,我只想添加,您可以使用它来获取行内容 $('input[name=checkboxID]:checked', $("#myDataTable").dataTable() .fnGetNodes()).closest('tr');然后使用 Andrew 发布的迭代。干杯!【参考方案2】:

这是一个使用 fnGetData() 的方法

首先从插件中获取所有行可见或不可见的数据。循环遍历每一行数据数组,并将 index=1(第二个单元格) 推入新数组

     oTable = $('#example').dataTable();

      var secondCellArray=[];
      $.each( oTable.fnGetData(), function(i, row)
          secondCellArray.push( row[1]);
    )

     console.log( secondCellArray)

编辑:工作演示...渲染后查看控制台

http://live.datatables.net/apixiv/edit#javascript,html

【讨论】:

【参考方案3】:

jQuery.mapfnGetData() 相结合,构成了一个紧凑的解决方案。以下函数将返回一个一维数组,其中包含来自obj_dtablenth 列的所有值:

function getDataTableColumn(obj_dtable,n) 
    return $.map(obj_dtable.fnGetData(), function(val) 
        return val[n];
    );
;

【讨论】:

【参考方案4】:

您需要使用“EQ”选择器。它从“0”的索引开始,所以如果你有..

<tr>
  <td>0</td>
  <td>1</td>
  <td>2</td>
  <td>3</td>
</tr>

然后通过使用

 $("td").eq(3); // last one
 $("td").eq(2); //returns "2"

有意义吗?

http://api.jquery.com/eq-selector/

【讨论】:

不能在分页表上工作,不可见的行不存在

以上是关于循环遍历 DataTables 表以获取所有单元格内容的主要内容,如果未能解决你的问题,请参考以下文章

循环遍历指定文件夹中的所有 excel 文件,并从特定单元格中提取数据的代码

DataTables + PDFmake = 颜色 PDF 表格单元格?

vba中怎么遍历单元格中所有字符串

将整个范围转换为大写,而不循环遍历所有单元格

使所有单元格在 DataTables 中可编辑

带有表变量的动态查询以循环遍历所有表以在数据库中更新