【问题标题】:Loop through DataTables table to get all cells content循环遍历 DataTables 表以获取所有单元格内容
【发布时间】: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 搜索和尝试了几个小时的东西,但我无法得到它,所以我想试一试。

标签: jquery datatables


【解决方案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/

      【讨论】:

      • 不能在分页表上工作,不可见的行不存在
      猜你喜欢
      • 1970-01-01
      • 2019-07-29
      • 1970-01-01
      • 2020-01-23
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多