jQuery:通过文本或HTML5数据属性过滤表

jQuery: filtering a table by text or HTML5 data-attribute

本文关键字:HTML5 数据属性 过滤 文本 jQuery      更新时间:2023-09-26

我有一个表,它有几个列和行,带有HTML5 data-attribute。在阅读了相当多的SO问题和答案后,我试图开发允许通过文本或data-attribute实时搜索表的代码,但我被卡住了我已经得到了相同的代码来处理<li>元素(请参阅此处的jsFiddle),所以我认为我的问题在于我的jQuery选择器。有人对我做错了什么有意见吗?

HTML:

<input id="search" placeholder="search" />
<table>
    <tr>
        <th colspan="4">
            California
        </th>
    </tr>
    <tr>
        <td>Name</td>
        <td>Company</td>
        <td>Link</td>
        <td>Notes</td> 
    </tr>
    <tr data-state="california">
      <td>Joe Smith</td>
      <td>Acme</td>
      <td>www.www.com</td>
      <td>n/a</td>
    </tr>
    <tr data-state="california">
      <td>Sue Smith</td>
      <td>Acme</td>
      <td>www.www.com</td>
      <td>n/a</td>
    </tr>
    <tr data-state="california">
      <td>Frank Jones</td>
      <td>Etc</td>
      <td>www.www.com</td>
      <td>n/a</td>
    </tr>
    <tr>
        <th colspan="4">
            Alaska
        </th>
    </tr>
    <tr data-state="alaska">
      <td>Sue Henderson</td>
      <td>Acme</td>
      <td>www.com.com</td>
      <td>n/a</td>
    </tr>
    <tr data-state="alaska">
      <td>Jimmy Dean</td>
      <td>Acme</td>
      <td>www.com.com</td>
      <td>n/a</td>
    </tr>
</table>

jQuery:

$("input#search").keyup(function(){
        var filter = $(this).val();
        var regExPattern = "gi";
        var regEx = new RegExp(filter, regExPattern);   
        $("table tr").each(function(){
        if (
        $(this).text().search(new RegExp(filter, "i")) < 0 &&
        $(this).data('state').search(regEx) < 0 
        ){
                $(this).hide();
            } else {
                $(this).show();
            }        
        });
});

jsfiddle:http://jsfiddle.net/Q3cvH/17/

您有3个tr元素没有data-state属性,您无法在其上调用.search

在尝试对.search执行以下操作之前,您应该检查data-state是否存在:

if($(this).data('state'))

演示