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);
})
}
Надеюсь, что это поможет.