【问题标题】:jQuery filters + bootstrap with multiple keywords带有多个关键字的 jQuery 过滤器 + 引导程序
【发布时间】:2018-12-14 20:28:49
【问题描述】:

我正在寻找修改引导过滤器以搜索多个关键字。

在下面的示例中,您只能搜索一个连续的关键字,例如“john”或“doe”。而我正在寻找输入“oh do”(或“do oh”),它应该返回第一个“john doe john@example.com”的行。

我一直在寻找其他一些示例,例如:thisthis。但我不能完全让它工作,与上面发布的示例相比,第一个示例相当慢......

我设法弄清楚我是否可以通过切换以某种方式做到这一点:

$(this).toggle($(this).text().toLowerCase().indexOf(value1) > -1 && $(this).text().toLowerCase().indexOf(value2) > -1)

然后它会返回我正在寻找的结果,如果它总是两个关键字会很容易,那么这将完全正常。但是在现实世界的场景中,在一个更大的表中,我们永远无法预测用户将输入多少个关键字,可能是 4 个或 5 个,或者可能是 1... python/django无助于理解和修改这个jquery代码来实现结果...

有没有人可以试一试?

$(document).ready(function(){
  $("#myInput").on("keyup", function() {
    var value = $(this).val().toLowerCase();
    $("#myTable tr").filter(function() {
      $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
    });
  });
});
<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>

<div class="container">
  <h2>Filterable Table</h2>
  <p>Type something in the input field to search the table for first names, last names or emails:</p>  
  <input class="form-control" id="myInput" type="text" placeholder="Search..">
  <br>
  <table class="table table-bordered table-striped">
    <thead>
      <tr>
        <th>Firstname</th>
        <th>Lastname</th>
        <th>Email</th>
      </tr>
    </thead>
    <tbody id="myTable">
      <tr>
        <td>John</td>
        <td>Doe</td>
        <td>john@example.com</td>
      </tr>
      <tr>
        <td>Mary</td>
        <td>Moe</td>
        <td>mary@mail.com</td>
      </tr>
      <tr>
        <td>July</td>
        <td>Dooley</td>
        <td>july@greatstuff.com</td>
      </tr>
      <tr>
        <td>Anja</td>
        <td>Ravendale</td>
        <td>a_r@test.com</td>
      </tr>
    </tbody>
  </table>
  
  <p>Note that we start the search in tbody, to prevent filtering the table headers.</p>
</div>
</body>
</html>

【问题讨论】:

    标签: jquery html-table


    【解决方案1】:

    不是短代码,但你可以试试这个

    function checkInput(element, value) {
      value = value.split(' ');
      for (var i = 0; i < value.length; i++) {
        if (value[i] && element.text().toLowerCase().indexOf(value[i]) == -1) return false;
      }
      return true;
    }
    
    $(document).ready(function() {
      $("#myInput").on("input", function() {
        var value = $(this).val().toLowerCase();
        $("#myTable tr").filter(function() {
          $(this).toggle(checkInput($(this), value))
        });
      });
    });
    

    使用 es6 every() 所有浏览器和 IE9+

    $(this).toggle(
        value.split(' ').every(val => $(this).text().toLowerCase().indexOf(val) > -1)
    )
    

    【讨论】:

      猜你喜欢
      • 2020-03-08
      • 1970-01-01
      • 1970-01-01
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-08
      • 1970-01-01
      相关资源
      最近更新 更多