JQuery DataTables. Как получить отфильтрованные (видимые) строки

У меня есть кнопка, которая применяет фильтр к jquery datatable

$("#buttonFilter").button().click(function() {
                if (lboxColor.val() != null) {
                    jqTable.fnFilter($("option:selected", lboxColor).text(), 1);
                }
            });

Он показывает мне, например, 47 строк из 60. Я пробовал .fnGetData() и fnGetNodes(), но он показывает мне все строки, но не фильтруется. Как я могу получить 47 строк?

Ответы

Ответ 1

Я искал около часа, для тех, кто использует DataTables 1.10+, если вы хотите получить отфильтрованные строки (лучший термин: "поиск" ):

var table = $('.table').DataTable({...});

function selectOnlyFiltered(){
   var filteredRows = table.rows({filter: 'applied'});
}

Ответ 2

Для данных 1.9 и более поздних версий это решение работает:

myDataTableHandle = $('#example1').dataTable(...);
...
...
var myFilteredRows = myDataTableHandle._('tr', {"filter":"applied"});

и вам не придется включать отдельный плагин api.:)

Ответ 3

На всякий случай, если вам нужен набор узлов (элементов DOM), как и fngetNodes(), вы можете использовать '$' вместо '_', как этот table.$('tr', {"filter":"applied"});

"_" возвращает коллекцию "TR" (элементы html).

Ответ 4

Просто для полноты, и, как сказал Юрий, есть "плагины", которые предоставят отфильтрованные TR Nodes или data.

Чтобы использовать эти плагины, вам нужно вставить код из этих ссылок в ваш файл script.

Ответ 5

Для тех, кого это интересует, это конкретная утилита.

/**
 * Select all the elements of the datatable which match the current user
 * search (or all if no search).
 */
function dtable_selectAll()
{
    idTable = 'myDataTable';
    var rows = $('#' + idTable).dataTable()
            .$('tr', {"filter":"applied"});
    var oTT = TableTools.fnGetInstance(idTable);
    $(rows).each(function (index, el){
        oTT.fnSelect(el);
    })
}

Надеюсь, что это поможет.