簡単なはずなのに….
フィルタリングされたdataTableから現在の行を返す方法を知っている人はいますか? oTable.fnGetNodes()
メソッドはall行を返します。ここで、フィルター処理された(表示されているがページ付けされた)行が必要です。
// 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から目に見えるデータを取得しています しかし、そこではあまり役に立ちません。
誰かがこれを必要とするなら、答えを見つけました:
まず、この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]);
}
}
これを行う最も簡単な方法は、実際には 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]);
};
}
Datatables 1.10の時点で、検索後にフィルター処理された行またはフィルター処理されていない行を取得する組み込みの方法があります。
var table = $('#example').DataTable();
table.rows( {search:'applied'} ).nodes();
table.rows( {search:'removed'} ).nodes();
現在のページのみまたはすべてのページと順序を取得するための他のオプションがあります。詳細はこちら: http://datatables.net/reference/type/selector-modifier
遅くなるよりはましですが、私はこれに苦労していました。これが私が思いついたものです
$.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;
}
データの代わりに実際のtrDOM要素を取得しようとしている場合、ソリューションは上記のアンダースコアソリューションと似ていますが、代わりに$メソッドを使用します。
function getFilteredDatatable() {
return $("table.dataTable").dataTable().$('tr', { "filter": "applied" });
}
詳細については、APIドキュメントページをご覧ください。 http://datatables.net/api
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を使用して、必要な親に移動できます。 (ここでは、遭遇した2番目のdiv親を選択しています)
テーブルを設定すると、各行の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);
}
});
});
次のように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;
}