Шаг 145.
Библиотека jQuery. Работа с таблицами. Изменение внешнего вида таблицы. Фильтрация. Параметры фильтра

    На этом шаге мы рассмотрим простейшую реализацию фильтра.

    Теперь можно перейти к фактической реализации фильтра. Для начала добавим фильтры для пары известных примечаний. Код для этого действия напоминает предыдущий пример выделения строк по автору:

 $(document).ready(function() {
   $('table.filterable').each(function() {
     var $table = $(this);
 
     $table.find('th').each(function(column) {
       if ($(this).is('.filter-column')) {
         var $filters = $('<div class="filters"></div>');
         $('<h3></h3>')
           .text('Фильтр по ' + $(this).text() + ':')
           .appendTo($filters);
           
         var keywords = ['Уч.пособие', 'Для web-программистов'];
         $.each(keywords, function(index, keyword) {
           $('<div class="filter"></div>').text(keyword)
             .bind('click', {key: keyword}, function(event) {
               $('tr:not(:has(th))', $table).each(function() {
                 var value = $('td', this).eq(column).text();
                 if (value == event.data['key']) {
                   $(this).show();
                 }
                 else {
                   $(this).hide();
                 }
               });
               $(this).addClass('active')
                 .siblings().removeClass('active');
             }).addClass('clickable').appendTo($filters);
         });
       
         $filters.insertBefore($table);
       }
     });
   });
 });

    Реализация начинается с определения статического массива ключевых слов, по которым будет выполняться фильтрация, затем выполняется обход массива в цикле и для каждого его элемента создается ссылка. Как и в примере с разбивкой на страницы, нам необходимо использовать аргумент data в вызове метода .bind(), чтобы избежать проблем, связанных с особенностями замыканий. После этого внутри обработчика события click содержимое каждой ячейки сравнивается с ключевым словом, и в случае несовпадения строка скрывается. Так как селектор строк исключает из набора строки, содержащие элемент <th>, можно не беспокоиться о том, что строки подзаголовков окажутся скрытыми.

    Обе ссылки работают именно так, как и предполагалось (рисунок 1).

Рис.1. В таблице возможна фильтрация

Полный текст этого примера можно взять здесь.

    На следующем шаге мы рассмотрим выборку параметров фильтра из содержимого.




Предыдущий шаг Содержание Следующий шаг