2014-12-24 3 views
11

Я использую DataTables javscript библиотека, и я пытаюсь фильтровать строки на основании, если численное значение больше 60.DataTables Javascript - фильтр() функция не работает, как ожидалось

Пытаюсь последовать этому примеру: код http://datatables.net/reference/api/filter%28%29

фильтр выглядит следующим образом:

table 
    .column(3) 
    .data() 
    .filter(function (value, index) { 
     return value > 60 ? true : false; 
    }) 

проблема заключается все строки являются видимыми и фильтрация не было сделано вообще. Даже если моя функция просто возвращает false, все строки все еще видны. Что тут происходит?

JSFiddle примера

http://jsfiddle.net/1hLcpr3x/

ответ

12

Пример вы ссылаетесь на фильтрует возвращающегося массив данных из столбцов, а не самих строк.

Вы можете проверить это, возвращая содержимое и протоколирование его

var filteredArray = table.column(3) 
         .data() 
         .filter(function(value, index) { 
          return value > 60 ? true : false; 
         }) 
         .draw(); 

console.log(filteredArray); 

FIDDLE

Это то, что делает метод filter, он фильтрует данные, когда вы возвращаете его data(), а не рядами.

Чтобы отфильтровать строки в месте, вы бы подключить в плагин DataTables, более конкретно $.fn.dataTableExt.afnFiltering, и сделать что-то вроде этого

$.fn.dataTableExt.afnFiltering.push(
    function (oSettings, aData, iDataIndex) { 
     return aData[3] < 60; 
    } 
); 

FIDDLE

Documentation for DataTables filtering

+0

Спасибо !!! Это отлично работает. – user985723

+0

У меня есть несколько типов данных на странице, как я могу убедиться, что мой пользовательский подключенный фильтр работает только с тем, который я хочу? Можно ли получить таблицу из переданного в настройках объекта? – Numeron

+0

@ CanÜrek - что вы имеете в виду, что он не работает? Он отфильтровывает кого-то с возрастом 60 или более, а в последней скрипке нет строк с людьми старше 59, так что он работает нормально? – adeneo

Смежные вопросы