私は検索フィルター機能を持っていますが、問題がそこにないことは 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 親のみを見ているということです。