2012-03-07 72 views
21

我正在使用jquery dataTables在我的网站上生成分页表。我需要运行一个从特定列中获取所有数据的进程。例如:循环通过DataTables表获取所有单元格内容

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

这个例子抓住了一切,但我只需要从一列tds的信息。我想我可以通过向该行中的所有tds添加一个类来实现,但我确信有更好的方法。这是一个额外的问题..但我真正想知道的是如何让这与数据表一起工作?由于该脚本隐藏了大部分表格以便进行分页,因此此功能仅抓取可见的单元格。我玩fnGetData,但我没有得到它。有任何想法吗?

+0

是什么目的?让行数据从API并不困难,而且也有可能例子在巨大下载package..post细节和代码尝试 – charlietfl 2012-03-07 19:01:50

+0

是获取数组中的所有行数据,然后我需要使用该数据来运行查询。我一直在搜索和尝试API的东西几个小时,但我不能得到它,所以我想给这个旋涡。 – Zac 2012-03-07 19:10:09

回答

45

要访问的所有行,你可以这样做:

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); 
    }); 
+1

他不想要所有的行。他希望每个节点都有一个特定的列。 – Ohgodwhy 2012-03-07 19:12:41

+4

@Ohgodwhy:好的,现在就在那里。 – Diego 2012-03-07 19:18:51

+0

是的!谢谢你正是我所需要的。 – Zac 2012-03-07 19:26:12

1

你要使用 “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/

+6

不能在分页表上工作,不可见的行不存在 – charlietfl 2012-03-07 19:19:17

6

下面是使用fnGetData()方法

首先从插件数据,这将是所有行可见或不可见。循环在每个行数据阵列,并推索引= 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

4

jQuery.map结合fnGetData()为紧凑的解决方案。下面的函数将返回包含从obj_dtablen列所有值的一维数组:

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