Retrieving row data after filtering JQuery Datatables

后端 未结 8 429
广开言路
广开言路 2020-12-28 18:09

Seems like it should be easy but...

Does anyone know how to return the current rows from a filtered dataTable? The oTable.fnGetNodes() method returns

8条回答
  •  旧时难觅i
    2020-12-28 18:52

    Figured out the answer, if anyone ever needs this:

    First, using this datatables extension to get all the hidden rows:

    $.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;
    }
    

    Then filter out the hidden nodes to get only visible nodes:

     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]); 
                }
        }
    

提交回复
热议问题