【问题标题】:Jquery search not hiding first row in a tableJquery搜索不隐藏表中的第一行
【发布时间】:2017-11-25 06:25:27
【问题描述】:

我很难理解为什么我对表格列的搜索总是显示第一行和之后的匹配行?即使关键字与第 1 行中的单元格不匹配,它也会始终显示在顶部?我已经多次检查了我的代码并尝试了不同的方法,它仍然不会隐藏第一行?

这是我的工作代码

$('#filterbyname').on("keyup", function () {
        var val = $(this).val();
        var matches = $("table.bill tr:not(:first-of-type)");

        matches.each(function (i,e) {            
            debugger;
            $row = $(this);                
            $cells = $row.find("td:nth-child(2)");

            $cells.each(function (i2, e2) {
                var cell = $(this).text();
                debugger;
                $row.toggle(cell.indexOf(val) >= 0);             
            });
        });
 });

您可以从上面的代码中看到如果cell.indexOf(val) >= 0),那么它将根据匹配的行进行切换。

有什么建议吗?

【问题讨论】:

  • 这是由于tr:not(:first-of-type)

标签: javascript jquery html css css-selectors


【解决方案1】:

实际上,在您的matches 变量中,您使用的是tr:not(:first-of-type),它选择所有行,除了第一个,因为:not 选择器在这里排除了与:first-of-type 匹配的所有元素,这意味着它们不是第一个父级中的子级,因此第一个 tr 将被忽略。

更改此代码:

var matches = $("table.bill tr:not(:first-of-type)");

致以下:

var matches = $("table.bill tr");

【讨论】:

  • 如果:not(:first-of-type) 是为了摆脱标题,那么使用$("table.bill > tbody > tr")
  • @freedomn-m 没有迹象表明 OP 中有一个带有tr 的`thead`。
  • @chsdk 感谢它的工作。正如freedomn-m 上面指出的那样,它可以摆脱标题。
  • @chsdk 正确,因此“if 就是这种情况”。该评论是针对 OP 的,而不是专门针对这个答案的(抱歉,这不清楚)。它的存在是有原因的,猜测是它忽略了第一个tr - 即标题中的那个。如果没有标题,它将忽略正文中的第一行。因此提出了建议。
猜你喜欢
  • 1970-01-01
  • 2015-11-07
  • 2012-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
  • 1970-01-01
相关资源
最近更新 更多