16

簡単なように思えますが...

フィルタリングされた 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

私はチェックしました:Datatablesから可視データを取得していますが、あまり役に立ちません。

4

9 に答える 9

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]);
    };
}
于 2013-09-03T20:23:38.650 に答える
3

データではなく実際の tr DOM 要素を取得しようとしている場合、ソリューションは上記のアンダースコア ソリューションに似ていますが、代わりに $ メソッドを使用します。

function getFilteredDatatable() {
    return $("table.dataTable").dataTable().$('tr', { "filter": "applied" });
}

詳細については、API ドキュメント ページを参照してください。http://datatables.net/api

于 2014-12-22T17:37:09.167 に答える
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;

}
于 2013-07-30T14:12:36.103 に答える
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;
}

次に、非表示のノードを除外して、表示されているノードのみを取得します。

 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]); 
            }
    }
于 2012-10-16T14:43:04.813 に答える
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);
         } 
      });
});
于 2015-03-13T12:56:25.523 に答える