2015-11-19 3 views
1

Я стараюсь использовать https://datatables.net/reference/api/filter(), но никакого эффекта. Я хотел бы фильтровать столбцы, установив флажок.jQuery datatables - как использовать фильтр()?

Код:

var table = $('#table').DataTable(); 

var filteredData = table 
    .column(0) 
    .data() 
    .filter(function (value, index) { 
     return value > 4000 ? true : false; 
    }); 

$("#show_only_packed").click(function() { 
    if ($(this).is(":checked")) { 
     filteredData.draw(); 
    } 
}); 

На самом деле я использовал search(), но я хочу понять, как использовать filter()

$("#show_only_packed").click(function() { 
    if ($(this).is(":checked")) { 
     table.column(3).search('Spakowano').draw(); 
    } else { 
     table.column(3).search('').draw(); 
    } 
}); 

ответ

2

ПРИЧИНА

метод API filter() часто путают с search(), но это не влияет на таблицу. Он возвращает только отфильтрованные данные в соответствии с данным условием.

РЕШЕНИЕ

Вы должны использовать custom filtering вместо этого.

Например:

$('#show_only_packed').on('click', function(){ 
    if(this.checked){ 
     $.fn.dataTable.ext.search.push(
     function (settings, data, dataIndex){ 
      return (data[0] > 4000) ? true : false; 
     } 
    ); 
    } 

    table.draw(); 

    if(this.checked){ 
     $.fn.dataTable.ext.search.pop();  
    } 
}); 

DEMO

См this jsFiddle для кода и демонстрации.

+0

Благодарим вас за разъяснение. Что вы думаете о моем решении с помощью 'search'? Я упростил: '$ ("# show_only_packed") нажмите (функция() { вар table_filter = table.column (3) .search ('') рисовать(); если ($ (.. это) .is (": checked")) { table_filter.search ('Spakowano') .draw(); } }); ' – user3041764

+1

@ user3041764,' search() 'Метод API хорош для текстовых search ('search ('Spakowano'') для более сложных сценариев, таких как' data [0]> 4000' пользовательская фильтрация. –

1

Ну, filter()не должен путать с функцией search(). Фактически filter()не производит прямого вывода на вашем столе, но может управлять данными за кулисами.

Предположим, у вас есть список людей в вашем столе с их возрастом в качестве одного из атрибутов. И ваша цель - посчитать старшего (более 60 лет) людей в этом наборе. Тогда это легко с помощью фильтра, как это:

var filteredData = table.column(3) 
    .data() 
    .filter(function (value, index) { 
    if (parseInt(value) > 60) { 
     eldersCount++; 
    } 
}); 

Здесь мы определяем наш возраст столбец быть номер столбца 3 (индекс на основе нуля), и мы делаем наши манипуляции ...

Вот fiddle

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