Показать сообщение отдельно
  #1 (permalink)  
Старый 05.04.2014, 13:49
Интересующийся
Отправить личное сообщение для Hedkost Посмотреть профиль Найти все сообщения от Hedkost
 
Регистрация: 25.02.2014
Сообщений: 10

Фильтр в таблице по select-ам
Работаю с таблицами, хочу сделать небольшой плагин чтоб не морочиться в дальнейшем, я только учусь. Что я делаю не так? Все работает кроме самого фильтрования. Если прописать для каждого select-а в столбце код функции add_filters(), то он заработает, когда через функцию для всех select - ничего не работает, не реагирует на изменения.
$(function() {
	var $table = $("#table_isp").tablework();
});
(function( $ ){
	$.fn.tablework = function() {
		var $table = $(this); 

		// Определяем сколько строк в таблице  
		var $rows = $table.find('tbody > tr').length;
		// Определяем сколько столбцов в таблице
		var $cols = $table.find('tbody >tr:first>td').length;
		
		// Добавляем строку в начало таблицы для select
		$table.find('thead').prepend("<tr></tr>");
		
		
		// Добавляем select-ы в шапку таблицы
		function add_select ($v) {
			for( var $i = 0; $i < $v; $i++) {
				$table.find('thead >tr:first').append("<td><select id='"+$i+$i+"'></select></td>");
			}
		}
		// Заполняем select-ы данными
		function in_select ($v) {
			for( var $i = 0; $i < $v; $i++) {
				var sel_num = $i;
				$table.find('tbody tr').each(function(){
					$(this).children('td').each(function(td_num){
						if(td_num==sel_num){
							var text_td = $(this).text();
							$("#"+sel_num+sel_num).append("<option>"+text_td+"</option>"); 
						}
					});
				});
				// Удаляем похожие строки
				$("#"+sel_num+sel_num+" option").each(function() { 
					var text_option = $(this).text(); 
					var options = $('option'); 
					var alf = $(this); var i = -1; 
					options.each(function() { 
					   if ( ($(this).text() == alf.text() )&& (++i>0) ) alf.remove() 
					}) 
				});
			}
		}
		// Добавляем первые пустые option вselect-ы 
		function add_optionfalse ($v) {
			for( var $i = 0; $i < $v; $i++) {
				$("#"+$i+$i).prepend("<option></option>");	
			}
		}
		// Добавляем фильтрацию по select-ам
		function add_filters ($v) {
			for( var $i = 0; $i < $v; $i++) {
				// Добавляем фильтрацию
				var filter = $("#"+sel_num+sel_num);
					filter.change(function(e) {
						var niddle = $(this).val();
						$table.find("tbody> tr").filter(function() {
							if (!$(this).find("td:eq("+sel_num+")").is(':contains("' + niddle + '")')) {
											return true;
									}
									else {
											$(this).show();
											return false;
									}
							}).hide();
					});			
			}
		}
		
		add_select ($cols);
		in_select ($cols);
		add_optionfalse ($cols);
		add_filters ($cols);
				
  };
})( jQuery );
Ответить с цитированием