似乎应该很容易但是......
有谁知道如何从过滤后的dataTable返回当前行? oTable.fnGetNodes()
方法返回所有行,我只想要过滤(可见,但包括分页)
// filter on division
var oTable = $('#summary-table').dataTable();
oTable.fnFilter(division_text, 2, true);
// Get the nodes from the table
var nNodes = oTable.fnGetNodes(); // <-- still retrieves original list of rows
我查了一下:Retrieving visible data from Datatables但没有多少帮助。
答案 0 :(得分:16)
最简单的方法实际上是内置于DataTables API:
_('tr', {"filter": "applied"})
在函数中使用:
function get_filtered_datatable() {
var filteredrows = $("#mydatatable").dataTable()._('tr', {"filter": "applied"});
for ( var i = 0; i < filteredrows.length; i++ ) {
debug.console(filteredrows[i]);
};
}
答案 1 :(得分:14)
从Datatables 1.10开始,有一种内置方法可以在搜索后获取已过滤或未过滤的行。
var table = $('#example').DataTable();
table.rows( {search:'applied'} ).nodes();
table.rows( {search:'removed'} ).nodes();
还有其他选项可以只获取当前页面或所有页面以及订单。 更多细节在这里: http://datatables.net/reference/type/selector-modifier
答案 2 :(得分:2)
迟到总比没有好,但我自己也在苦苦挣扎。这是我想出来的
$.fn.dataTableExt.oApi.fnGetVisibleData = function(){
displayed = [];
currentlyDisplayed = this.fnSettings().aiDisplay; //gets displayed rows by their int identifier
for (index in currentlyDisplayed){
displayed.push( this.fnGetData( currentlyDisplayed[index] ));
}
return displayed;
}
答案 3 :(得分:1)
找出答案,如果有人需要这个:
首先,使用此datatables扩展来获取所有隐藏的行:
$.fn.dataTableExt.oApi.fnGetHiddenTrNodes = function (oSettings, arg1, arg2) {
/* Note the use of a DataTables 'private' function thought the 'oApi' object */
var anNodes = this.oApi._fnGetTrNodes(oSettings);
var anDisplay = $('tbody tr', oSettings.nTable);
/* Remove nodes which are being displayed */
for (var i = 0; i < anDisplay.length; i++) {
var iIndex = jQuery.inArray(anDisplay[i], anNodes);
if (iIndex != -1) {
anNodes.splice(iIndex, 1);
}
}
/* Fire back the array to the caller */
return anNodes;
}
然后过滤掉隐藏的节点以仅获取可见节点:
var rows = oTable.fnGetNodes(); // get all nodes
var rows_hidden = oTable.fnGetHiddenTrNodes(); // get all hidden nodes
var result = [], found;
// remove hidden nodes from all nodes
for (var i = 0; i < rows.length; i++) {
found = false;
for (var j = 0; j < rows_hidden.length; j++) {
if (rows[i] == rows_hidden[j]) {
found = true;
break;
}
}
if (!found) {
result.push(rows[i]);
}
}
答案 4 :(得分:1)
如果您尝试获取实际的tr DOM元素而不是数据,则解决方案类似于上面提供的下划线解决方案,但您使用的是$ method。
function getFilteredDatatable() {
return $("table.dataTable").dataTable().$('tr', { "filter": "applied" });
}
API文档页面提供了更多信息。 http://datatables.net/api
答案 5 :(得分:1)
感谢AlecBoutin,这是最简单的方法。
我正在尝试搜索按选项卡排列的多个表,我想显示找到结果的表。
您的解决方案非常简单
// make the global search input search into all tables (thanks to a class selector)
$('#oversearch').on( 'keyup', function () {
$('.table').DataTable().search( this.value ).draw();
var row = $('.table').DataTable().$('tr', { "filter": "applied" });
console.log(row.parents("div")[1]);
});
然后,您可以使用Parents()jQuery导航到所需的任何父项。 (这里我选择遇到的第二个div父对象)
答案 6 :(得分:0)
您可以按如下方式获取可见行列表,更改fnGetHiddenTrNodes函数。
$.fn.dataTableExt.oApi.fnGetVisibleTrNodes = function (oSettings, arg1, arg2) {
/* Note the use of a DataTables 'private' function thought the 'oApi' object */
var anNodes = this.oApi._fnGetTrNodes(oSettings);
var anDisplay = $('tbody tr', oSettings.nTable);
var visibleNodes = [];
for (var i = 0; i < anDisplay.length; i++) {
var iIndex = jQuery.inArray(anDisplay[i], anNodes);
if (iIndex != -1) {
visibleNodes.push(anDisplay[i]);
}
}
/* Fire back the array to the caller */
return visibleNodes;
}
答案 7 :(得分:0)
使用表设置这对我来说有一个复选框,每个行都有一个id,另一个复选框将在应用过滤(仅过滤行)或不(所有行)时选择所有行
$(document).ready(function() {
var myDataTableHandle = $('#example').dataTable({"bPaginate": false});
$('#selectAllCheckBox').click(function() {
if($(this).is(':checked')){
var filteredRows = myDataTableHandle._('tr', {"filter":"applied"});
alert( filteredRows.length +' nodes were returned' );
$(myDataTableHandle.fnGetNodes()).find($('input[name=idCheckBox]')).each(function () {
$(this).prop('checked', true);
});
else{
$('input[name=idCheckBox]:checked').prop('checked', false);
}
});
});
答案 8 :(得分:0)
我曾经在 1.10.x 版本中使用 Datatable
var table = $('#example').DataTable();
var filtered_data = table.rows( {search:'applied'} ).data();
var removed_data = table.rows( {search:'removed'} ).data();
检查示例 Codepen