【问题标题】:Show result if <td> contains searched words ,Irrespective of arrangement of words searched如果 <td> 包含搜索词,则显示结果,与搜索词的排列无关
【发布时间】:2020-05-25 14:13:14
【问题描述】:

我想要一张表,其中包含 td 中的单词。我想知道是否有任何方式显示搜索结果,而不管用户搜索的方式如何。例如 td 包含“love and dance and sing”,但我的代码只有在用户输入“love and dance and sing”时才会显示结果。如果用户输入“dance and love”它不显示。我想显示结果而不管单词的排列, 即,如果用户输入“sing and dance”或dance and love,结果应该会显示出来。

任何帮助将不胜感激。提前致谢

这是我的代码

$(document).ready(function() {

  (function($) {

    $('#filter').keyup(function() {

      var rex = new RegExp($(this).val(), 'i');
      $('.searchable tr').hide();
      $('.searchable tr').filter(function() {
        return rex.test($(this).text());
      }).show();

    })

  }(jQuery));

});
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>

<input id="filter" type="search" placeholder="Search"></form>
<table>
  <tbody class="searchable">
    <tr>
      <td>love and dance </td>
      <td> something else</td>
    </tr>
    <tr>
      <td>play and eat </td>
      <td></td>
    </tr>
    <tr>
      <td>love and roll </td>
      <td></td>
    </tr>
  </tbody>
</table>

【问题讨论】:

    标签: javascript html jquery html-table


    【解决方案1】:

    遍历搜索词并单独检查它们。不需要正则表达式。

    我也会质疑你是否真的需要 jQuery;如果没有它,这段代码也同样容易编写,而且更加灵活。

    $(document).ready(function() {
      (function($) {
        $('#filter').keyup(function() {
          var terms = this.value.split(' ');
          $('.searchable tr').hide();
          $('.searchable tr').filter(function() {
            for (var term of terms) {
              if (this.textContent.indexOf(term) < 0) return false;
            }
            return true;
          }).show();
        })
      }(jQuery));
    });
    <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
    
    <input id="filter" type="search" placeholder="Search">
    <table>
      <tbody class="searchable">
        <tr>
          <td>love and dance </td>
          <td> something else</td>
        </tr>
        <tr>
          <td>play and eat </td>
          <td></td>
        </tr>
        <tr>
          <td>love and roll </td>
          <td></td>
        </tr>
      </tbody>
    </table>

    【讨论】:

    • 谢谢你,先生,正是我想要的
    【解决方案2】:

    您可以使用 javascript includes() 函数来检查您的字符串是否是文本的子字符串。

    $(document).ready(function() {
      (function($) {
        $('#filter').keyup(function() {
          var filterText = $(this).val();
          $('.searchable tr').hide();
          $('.searchable tr').filter(function() {
            return $(this).text().includes(filterText)
          }).show();
        })
      }(jQuery));
    });
    <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
    
    <input id="filter" type="search" placeholder="Search"></form>
    <table>
      <tbody class="searchable">
        <tr>
          <td>love and dance </td>
          <td> something else</td>
        </tr>
        <tr>
          <td>play and eat </td>
          <td></td>
        </tr>
        <tr>
          <td>love and roll </td>
          <td></td>
        </tr>
      </tbody>
    </table>

    【讨论】: