JQuery修改表搜索

时间:2017-12-13 18:11:59

标签: jquery html html-table

我目前有JQuery代码来搜索第一列的表并按行排序。但是,它包含我们希望从搜索中排除的其他注释信息,因此搜索仅限于系统名称信息。

SearchFilter.customfilter = function(searchInput, table) {
  var input, filter, table, tr, td, i;
  input = document.getElementById(searchInput);
  filter = input.value.toUpperCase();
  table = document.getElementById(table);
  tr = table.getElementsByTagName("tr");
  // Loop through all table rows, and hide those who don't match the search query
  for (i = 0; i < tr.length; i++) {
    td = tr[i].getElementsByTagName("td")[0];
    if (td) {
      if (td.innerText.toUpperCase().indexOf(filter) > -1) {
        tr[i].style.display = "";
      } else {
        tr[i].style.display = "none";
      }
    } 
  }
}

这是正在搜索的HTML表的示例行:

      <tr>
        <td><a href="site.html">System Name</a>
          <p class="tablenote"><small>Note: System note information. </small></p>
        </td>
        <td>N/A</td>
        <td>N/A</td>
      </tr>

是否有一种很好的方法来修改jquery代码以从搜索中排除表格信息,例如排除该tablenote类或排除小文本?

1 个答案:

答案 0 :(得分:-1)

您可以使用jQuery&#39; .filter()(与:contains选择器一起)来过滤掉类.tablenote中任何元素内的结果。关键代码如下:

var inputText = "Joel";

var $matches = $('.row').find(':contains(' + inputText + ')').filter(function(){
    // only include matches that are *not* inside an .info element
    return $(this).closest('.tablenote').length == 0;
});

var rowContainsInput = ($matches.length > 0);

因此,基本上说&#34;告诉我此行是否包含输入文本,但如果它在.tablenote元素内。< / p>

查看我的JSFiddle here

注意:但是,如果您首先控制了标记,最好将类添加到系统名称锚点(如<a href="..." class="system-name">System Name</a>),然后具体目标$row.find('.system-name')。或者更好的是,最好使用数据属性标记系统名称锚点:<a href="..." data-system-name>System Name</a>,然后您可以将其定位为:$row.find('[data-system-name]')