循环遍历 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.map
与fnGetData()
相结合,构成了一个紧凑的解决方案。以下函数将返回一个一维数组,其中包含来自obj_dtable
的n
th 列的所有值:
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 文件,并从特定单元格中提取数据的代码