/*
* * Plugin created by Andras Zoltan-Gyarfas - azolee [at] gmail [dot] com * License: GNU License - http://www.gnu.org/licenses/gpl.html * Demo & latest release: http://realizare-site-web.ro/works/codes/jquery/HTML-Select-List-Filter/index.html * Last modification date: 04/20/2011 * */
;(function($) {
$.fn.selectFilter = function() { var name = $(this).attr("name").replace(/\]/g, '').replace(/\[/g, ''); $(this).addClass(name+"_select"); var iname = name; $(this).before("<input class='"+iname+"' style='display: block;' type='text' />"); $(this).css("display", "block"); $("input."+name).live("keyup", function(){ var txt = $(this).val().toLowerCase(); var fields=txt.split(' '); var text = new Array(); var tags = new Array(); var tag_matcher = new RegExp("^tag:"); for (var i = 0; i < fields.length; ++i) { var el = fields[i]; if (tag_matcher.test(el)) { el = el.split(':'); tags.push(new RegExp(el[1])); } else if (el.length != 0) { text.push(new RegExp(el)); } } if (text.length == 0 && tags.length == 0) { $("."+name+"_select").children('div').show(); } else { $("."+name+"_select").children('div').hide(); $("."+name+"_select").children('div').each(function(i, selected){ var value = $(this).text().toLowerCase(); var show = true; for (var i = 0; show && i < text.length; ++i) { if (!text[i].test(value)) { show = false; } } var value = $(this).attr('tags'); if (value) { value = value.toLowerCase(); for (var i = 0; show && i < tags.length; ++i) { if (!tags[i].test(value)) { show = false; } } } if (show) { $(selected).show(); } }); } }); return this; };
})(jQuery);