2014-12-24 9 views
11

Używam DataTables javscript biblioteki i próbuję filtrować w oparciu o wiersz, jeśli wartość liczbowa jest większa niż 60.Javascript DataTables - filtr() funkcja nie działa zgodnie z oczekiwaniami

Próbuję podążać za tym przykładem: kod http://datatables.net/reference/api/filter%28%29

Filtr wygląda następująco:

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

problemem jest to, wszystkie wiersze są nadal widoczne i nie filtrowanie zostało zrobione w ogóle. Nawet jeśli moja funkcja po prostu zwróci false, wszystkie wiersze są nadal widoczne. Co tu się dzieje?

JSFiddle przykładu

http://jsfiddle.net/1hLcpr3x/

Odpowiedz

12

Przykład łączysz się filtruje powracającego tablicę danych z kolumn, a nie samych rzędach.

Można to sprawdzić poprzez odesłanie zawartości i zalogowaniu mu

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

console.log(filteredArray); 

FIDDLE

To, co czyni metodę filter, filtruje dane, po powrocie go data(), a nie wiersze.

Aby odfiltrować wiersze w miejscu, można zaczepić do wtyczki DataTables dokładniej $.fn.dataTableExt.afnFiltering i zrobić coś takiego

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

FIDDLE

Documentation for DataTables filtering

+0

Dziękuję !!! Działa to świetnie. – user985723

+0

Mam wiele datatables na stronie, w jaki sposób upewnić się, że mój niestandardowy filtr hooked działa tylko z jednym chcę? Czy mogę wyprowadzić tabelę z przekazanego obiektu ustawień? – Numeron

+0

@ Canúrek - co masz na myśli, że to nie działa? Odfiltrowuje każdego, kto ma 60 lub więcej lat, aw ostatnim skrzypcach nie ma wierszy z osobami starszymi niż 59, więc działa dobrze? – adeneo

Powiązane problemy