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 ステートメントは、上記の例でのみ最後の 3 行を非表示にする必要があります。

<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 を使用して、 classtrを持つすべての next を非表示にする必要はありません。tdtime

ライブデモ

$(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 に答える