javascript - 对动态 HTML 表格应用多重过滤

标签 javascript jquery html

我正在尝试使用两个输入标签应用多重过滤。 第一个询问员工 ID,第二个询问员工姓名。该表正在从 .xlsx 文件读取数据。

这是我的过滤代码。

$rows = $("#tblData tr");
$("#empId", "#empName").on("input", function () {
    var val1 = $.trim($('#empId').val()).replace(/ +/g, ' ').toLowerCase();
    var val2 = $.trim($('#empName').val()).replace(/ +/g, ' ').toLowerCase();
    $rows.show().filter(function () {
        var text1 = $(this).find("td:nth-child(1)").text().replace(/\s+/g, ' ').toLowerCase();
        var text2 = $(this).find("td:nth-child(2)").text().replace(/\s+/g, ' ').toLowerCase();
        return !~text1.indexOf(val1) || !~text2.indexOf(val2);
    }).hide();
});

我听说我应该将语句 td:nth-child(1)td:nth-child(2) 更改为行的索引,而不是对其进行硬编码。

最佳答案

您的过滤功能正在运行...

但是 input 事件处理程序被分配给具有语法错误的选择器。

$("#empId","#empName") 应为 $("#empId,#empName")
注意引号

然后我建议一些更简洁的东西......使用 .trim() 。但你的方式,使用 .replace()正在工作。

$(document).ready(function(){

  $rows=$("#tblData tr");

  $("#empId,#empName").on("input",function(){
    var val1 = $('#empId').val().trim().toLowerCase();
    var val2 = $('#empName').val().trim().toLowerCase();

    console.log(val1 +" | "+ val2);

    $rows.show().filter(function(){
      var text1=$(this).find("td:nth-child(1)").text().trim().toLowerCase();
      var text2=$(this).find("td:nth-child(2)").text().trim().toLowerCase();
      return !~text1.indexOf(val1)||!~text2.indexOf(val2);
    }).hide();

  });
});
#tblData tr td{
  border:1px solid black;
  height:1em;
  width:14em;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

ID: <input type="txt" id="empId"><br>
Name: <input type="txt" id="empName"><br>
<br>
<table id="tblData">
  <tr>
    <td>0001</td><td>John Doe</td><td>President</td>
  </tr>
  <tr>
    <td>0002</td><td>Jane Doe</td><td>Secretary</td>
  </tr>
  <tr>
    <td>0157</td><td>Ali Gator</td><td>Accountant</td>
  <tr>
</table>

现在关于 nth-child()选择器,因为您没有发布 HTML,所以我认为其目的是针对某些特定的 td,例如表中的特定列。在这种情况下,这些选择器得到了很好的使用。

关于javascript - 对动态 HTML 表格应用多重过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50828446/

相关文章:

html - 使一个 flex item 固定宽度并且它的 sibling 都相等大小

javascript - Delphi、EmbeddedWB/TWebbrowser - jQuery 未执行

javascript - 在 Kendo UI Treeview Drop 事件中确认

javascript - 具有大量元素的组合框的良好 Javascript 组合框替代品?

html - 用css匹配两个图像位置

javascript - 如何将点击事件绑定(bind)到另一个点击元素中的元素

javascript - 更改 div 属性标题颜色

javascript - 对象.getOwnPropertyNames()

javascript - jQuery 图像加载 - 多个完成函数执行

javascript - 在全屏视频上显示文字