jquery таблицы данных. Как получить отфильтрованные (видимые) строки

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

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

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


person Yuri    schedule 25.06.2011    source источник
comment
Вопрос закрыт. Я использовал метод из плагина для таблиц данных fnGetFilteredData() . datatables.net/plug-ins/api#how_to   -  person Yuri    schedule 25.06.2011
comment
Если вопрос закрыт, напишите свой ответ и примите его через два дня.   -  person Nicola Peluchetti    schedule 26.06.2011


Ответы (7)


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

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

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

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

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

и вам не нужно будет включать отдельный плагин API. :)

person RayLoveless    schedule 22.01.2013
comment
У меня не работает :( Он возвращает значения только на текущей видимой странице. Например, в информационной строке моей таблицы отображается от 1 до 10 из 45 048 записей (отфильтровано из 45 248 записей), а код {"filter":"applied"} дает мне только 10 значений. - person user9645; 19.08.2013
comment
Я вижу, что fnRecordsDisplay() действительно дает правильное значение 45 048, поэтому есть способ получить все отфильтрованные узлы/значения. Кто-нибудь знает НАСТОЯЩИЙ ответ? - person user9645; 19.08.2013
comment
К вашему сведению. Обнаружена проблема: нет узлов TR для строк на невидимых страницах при включении bDeferRender. См. здесь - person user9645; 19.08.2013

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

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

person Bedouin    schedule 15.04.2014

В текущих версиях селектор-модификатор использует немного другой набор свойств.

var table = $('#example').DataTable();
var rows = table.rows({"search" : "applied"});

И вы можете перебирать данные ячейки следующим образом:

table.rows({"search":"applied" }).every( function () {
    var data = this.data();
});

Некоторые полезные ссылки:

person billynoah    schedule 22.01.2020

Для тех, кто заинтересован, это конкретный вариант использования.

/**
 * 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);
    })
}

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

person Moebius    schedule 03.09.2014

Для тех, кто изо всех сил пытается получить данные из только одного столбца И только из видимых строк: вы можете комбинировать "селекторы" следующим образом.

var total = api
      .column(2, { search: 'applied' }) // <-- only 3rd column && only visible after applied search
      .data()
      .reduce(function (a, b) {
        return floatVal(a) + floatVal(b)
      }, 0)

Я также заметил, что в нескольких источниках указано, что {page: 'current'} будет правильным селектором для видимых в данный момент строк, но этот на самом деле дает вам строки, видимые после возможного разбиения на страницы.

person David Otto    schedule 02.04.2020

Просто для полноты картины, как упомянул Юрий, есть «плагины», которые предоставляют отфильтрованные узлы TR или данные.

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

person Gavin Brock    schedule 11.11.2011
comment
Я не могу найти функцию плагина на странице API, она была удалена? - person T.Ho; 15.06.2012