На этом шаге мы рассмотрим простейшую реализацию фильтра.
Теперь можно перейти к фактической реализации фильтра. Для начала добавим фильтры для пары известных примечаний. Код для этого действия напоминает предыдущий пример выделения строк по автору:
$(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. В таблице возможна фильтрация
Полный текст этого примера можно взять здесь.На следующем шаге мы рассмотрим выборку параметров фильтра из содержимого.