搜索列html表

时间:2013-09-02 21:54:33

标签: javascript jquery html search html-table

我创建了一个包含HTML的表,并希望集成一个搜索框,可以搜索4列(name,name2,last_name,last_name2)。我试图找到1列,但写完后,下一列没有显示任何内容

例如我想:

 find name and last_name                
 find name2  and last_name2
 find last_name  and name2
 find name and last_name and name2

换句话说,无论顺序如何,按下“SPACE”键后都没有显示结果。

这是我的问题:

<input type="text" id="filter" />
 <table id="table">
    <tr>
       <td>foo</td>
       <td>1</td>
   </tr>
   <tr>
        <td>bar</td>
        <td>2</td>
   </tr>
   <tr>
        <td>some</td>
        <td>3</td>
   </tr>
   <tr>
    <td>other</td>
    <td>4</td>
   </tr>
</table>

这是我的Javascript:

 // Function
 function filterTable(value) {
  if (value != "") {
    $("#table tbody>tr").hide();
    $("#table td:contains-ci('" + value + "')").parent("tr").show();
  } else {
    $("#table tbody>tr").show();
  }
 } 

 // jQuery expression for case-insensitive filter
$.extend($.expr[":"], {
 "contains-ci": function (elem, i, match, array) {
     return (elem.textContent || elem.innerText || $(elem).text() || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
  }
 });

// Event listener
$('#filter').on('keyup', function () {
 filterTable($(this).val());
 });

请有人知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果您输入多个单词,则必须单独过滤每个单词。否则,您正在寻找具有整个空格分隔字符串的字段。

这会拆分搜索字符串,然后显示与其中任何一个匹配的行。

// Function
 function filterTable(value) {
     if (value != "") {
         $("#table td:contains-ci('" + value + "')").parent("tr").show();
     }
 }

 // jQuery expression for case-insensitive filter
 $.extend($.expr[":"], {
     "contains-ci": function (elem, i, match, array) {
         return (elem.textContent || elem.innerText || $(elem).text() || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
     }
 });

 // Event listener
 $('#filter').on('keyup', function () {
     if ($(this).val() == '') {
         $("#table tbody > tr").show();
     } else {
         $("#table > tbody > tr").hide();
         var filters = $(this).val().split(' ');
         filters.map(filterTable);
     }
 });

FIDDLE