Filter/Search A Table 使用部分匹配 - HTML & Javascript

Filter/Search A Table Using Partial Match - HTML & Javascript

我有一个 HTML table,我正在尝试使用模糊搜索和部分匹配来过滤它。我尝试过很多 JS 库,但它们似乎并没有同时提供这两种过滤器选项。我试过 FuzySort.js、FlexSearch.js 等。有谁知道可以做到这一点的图书馆吗?

基础:

要求:

预期结果: 如果...

当前结果:

当前代码

    function myFunction() {
  var input, filter, table, tr, td, i, txtValue;
  input = document.getElementById("myInput");
  filter = input.value.toUpperCase();
  table = document.getElementById("myTable");
  tr = table.getElementsByTagName("tr");
  for (i = 0; i < tr.length; i++) {
    td = tr[i].getElementsByTagName("td")[1];
    if (td) {
      txtValue = td.textContent || td.innerText;
      if (txtValue.toUpperCase().indexOf(filter) > -1) {
        tr[i].style.display = "";
      } else {
        tr[i].style.display = "none";
      }
    }       
  }
}

这是我的 JSFiddle: https://jsfiddle.net/h7p8bzs0/

非常感谢任何帮助或指导。 有没有人对什么库可以实现这些结果有任何建议,或者我如何调整上面的 JS 代码来做到这一点?

Ps:抱歉,我是新手,对使用 JSON、Node.JS、实际数据库等选项不知所措

您可能想尝试以下方法Javascript:

function myFunction() {
  const input = document.getElementById("myInput");
  const filters = input.value.toUpperCase().split(' '); // create several filters separated by space
  const table = document.getElementById("myTable");
  const tr = table.getElementsByTagName("tr");

  for (let i = 0; i < tr.length; i++) {
    const td = tr[i].getElementsByTagName("td")[1];

    if (td) {
      const txtValue = td.textContent || td.innerText;
        tr[i].style.display = "none"; // hide each row
        
      for (filter of filters) { // add the rows matching a filter
        if (txtValue.toUpperCase().indexOf(filter) > -1) {
          tr[i].style.display = "";        
        }
      }       
    }
  }
}

这里发生的是我们创建了多个要匹配的过滤器字符串,由 space 分隔。一旦我们有至少一个过滤器,我们就会隐藏每一行,如果它至少匹配一个过滤器,我们会再次添加它。

哦,我稍微重构了你的变量:我们不需要预先声明符,我们希望将它们作为 let 或 const,这样它们就不是全局的。