过滤JQuery数据表后检索行数据

pro*_*ock 14 jquery jquery-datatables

看起来应该很容易但......

有谁知道如何从过滤后的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
Run Code Online (Sandbox Code Playgroud)

我检查过:从Datatables中检索可见数据,但没有太多帮助.

Joe*_*vin 16

实现此目的的最简单方法实际上是内置于DataTables API:

_('tr', {"filter": "applied"})
Run Code Online (Sandbox Code Playgroud)

用于函数:

function get_filtered_datatable() {
    var filteredrows = $("#mydatatable").dataTable()._('tr', {"filter": "applied"});

    for ( var i = 0; i < filteredrows.length; i++ ) {
        debug.console(filteredrows[i]);
    };
}
Run Code Online (Sandbox Code Playgroud)


小智 14

从Datatables 1.10开始,有一种内置方法可以在搜索后获取已过滤或未过滤的行.

var table = $('#example').DataTable();
table.rows( {search:'applied'} ).nodes();
table.rows( {search:'removed'} ).nodes();
Run Code Online (Sandbox Code Playgroud)

还有其他选项可以只获取当前页面或所有页面以及订单.更多细节在这里:http: //datatables.net/reference/type/selector-modifier


pro*_*ock 1

找出答案,如果有人需要这个:

首先,使用此数据表扩展来获取所有隐藏行:

$.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;
}
Run Code Online (Sandbox Code Playgroud)

然后过滤掉隐藏节点,只得到可见节点:

 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]); 
            }
    }
Run Code Online (Sandbox Code Playgroud)

  • 代码太多了。DataTables 实际上通过使用下划线函数将其内置到其 API 中。 (3认同)