/* * Table Filter (for jQuery) * version: 0.1.0 (Oct. 18, 2012) * * Licensed under the MIT: * http://www.opensource.org/licenses/mit-license.php * * Copyright 2012 Efe Amadasun [ [email protected] ] * * USAGE: * * <input type="text" class="f_txt"/> * <table class="f_tbl">...</table> * * $(function(){ * $(".f_txt").table_filter({'table':'.f_tbl'}); * }); * * ADDITIONAL SETTINGS: * * filter_inverse (boolean) - default: False * True - filters out rows that match the filter text * False - filters out rows that do not match the filter text * * enable_space (boolean) - default: False * True - it uses space in filter text as delimiters. e.g. if filter text = "good boy", it * will search rows for "good" and "boy" seperately * False - it will not use space as a delimiter. e.g. "good boy" will be treated as one word. * */ (function($){ $.fn.table_filter = function (options) { //set default plugin values var settings = $.extend({ 'filter_inverse': false, 'enable_space': false, 'table': '' }, options); //return element, to maintain chainability return this.each(function () { var $this = $(this); $this.bind("keyup", function () { //set filter text, and filterable table rows var txt = $this.val().toLowerCase(); var obj = $(settings.table).find("tr:not(:has('th'))"); $.each(obj, function () { //default visibilty for rows is set based on filter_inverse value var show_tr = (settings.filter_inverse) ? true : false; var inner_obj = $(this).find("td"); $.each(inner_obj, function () { var td_txt = $.trim($(this).text()).toLowerCase(); //if space is enabled as a delimiter, split the TD text value //and check the individual values against the filter text. if(settings.enable_space){ var td_array = txt.split(" "); $.each(td_array, function (i) { var td_value = td_array[i]; if(td_txt.indexOf(td_value) != -1){ show_tr = (settings.filter_inverse) ? false : true; } }); } else{ if(td_txt.indexOf(txt) != -1){ show_tr = (settings.filter_inverse) ? false : true; } } }); if(show_tr){ $(this).show(); } else{ $(this).hide(); } }); //display all rows if filter text is empty if($.trim(txt) == ""){ $(settings.table).find("tr").show(); } }); }); }; })(jQuery); $(function(){ $(".f_txt").table_filter({'table':'.f_tbl'}); });
table, table td{border:1px solid #ccc;} div{margin:25px;width:350px;} table{width:100%;} input{width:93.5%;margin-bottom:5px;padding:5px 10px;} table td, table th{padding:10px 15px;} table th{background:#eee;}
<div> <input type="text" class="f_txt" placeholder="キーワードを入力"> <table class="f_tbl"> <tr> <th>foo</th> <th>bar</th> </tr> <tr> <td>りんご</td> <td>みかん</td> </tr> <tr> <td>ナシ</td> <td>ブドウ</td> </tr> <tr> <td>dog</td> <td>cat</td> </tr> <tr> <td>東京</td> <td>埼玉</td> </tr> </table> </div>