1

我有一个搜索过滤器功能,但我 99% 确定问题不存在。

我首先调用搜索过滤器,然后运行 ​​if 语句来确定是否应该隐藏该行。

想象一下,在执行搜索后我有以下可见的表行:

<tr>
  <td class="time">content<td>
</tr>
<tr>
  <td>result</td>
<tr>
</tr>
  <td>result</td>
</tr>
<tr>
  <td class="time">content<td>
</tr>
<tr>
  <td class="time">content<td>
</tr>
<tr>
  <td class="time">content<td>
</tr>

我的目标是隐藏所有具有时间类的 td 元素,前提是它们由包含具有相同时间类的 td 元素的行进行。因此 if 语句应该只在我上面的例子中隐藏最后三行,即:

<tr>
  <td class="time">content<td>
</tr>
<tr>
  <td>result</td>
<tr>
</tr>
  <td>result</td>
</tr>

我尝试了以下方法无济于事:

$('td.time').parent().each(function() {
  if($(this).siblings().first().children('td.time').length > 0) {
    $(this).hide();
  }
});

以上方法有效,但前提是我的搜索返回单个结果。如果在不同的时间行之后存在另一个结果,则错误地隐藏了该时间行。

以下是我目前拥有的,但它只是隐藏了所有时间行,即使理论上它是有意义的:

$('td.time').parent().each(function() {
  if($(this).next(':visible').children('.time')) {
    $(this).hide();
  }
});

我唯一的解释是,使用 .next() 它只查看下一个 td.time 父级,而不是所有可见表行中的下一个。

4

2 回答 2

1

尝试将nextAll()用于父 tr ,您可能不需要在这里使用 each 来隐藏所有 nexttrtdclass time

现场演示

$(this).closest('tr').nextAll('tr:has(td.time)').hide();
于 2013-03-25T05:14:51.740 回答
0

它不是很优雅,但试试这个

$(".time").each(function() {
    if ($(this).parent("tr").next("tr").find(".time").length > 0) {
        $(this).parent("tr").hide();
    }
});
于 2013-03-25T05:19:28.160 回答