私はjQueryの初心者です。
さまざまなカテゴリの値を含むチェック ボックスに基づいてフィルター処理する必要があるこのテーブルがあります。ここに私が取り組んできたコードがあります
<input class="prod_status" type="checkbox" value="Discontinued">Discontinued<br/>
<input class="prod_status" type="checkbox" value="Shipping">Shipping<br/>
<input class="prod_capacity" type="checkbox" value="1GB">1GB<br/>
<input class="prod_capacity" type="checkbox" value="2GB">2GB<br/>
<input class="prod_capacity" type="checkbox" value="4GB">4GB<br/>
<input class="prod_speed" type="checkbox" value="1000MHz">1000MHz<br/>
<input class="prod_speed" type="checkbox" value="1333MHz">1333MHz<br/>
<br /><br />
<table class="someclass" border="0" cellpadding="0" cellspacing="0" summary="bla">
<caption>bla bla</caption>
<thead>
<tr id="ProductID">
<th>Product Number</th>
<th>Status</th>
<th>Capacity</th>
<th>Speed</th>
</tr>
</thead>
<tbody>
<tr id="Memory1" class="part_detail">
<td class="name">Memory1</td>
<td class="status">Shipping</td>
<td class="capacity">1GB</td>
<td class="speed">1333MHz</td>
</tr>
<tr id="Memory2" class="part_detail">
<td class="name">Memory2</td>
<td class="status">Discontinued</td>
<td class="capacity">2GB</td>
<td class="speed">1000MHz</td>
</tr>
<tr id="Memory3" class="part_detail">
<td class="name">Memory3</td>
<td class="status">Shipping</td>
<td class="capacity">2GB</td>
<td class="speed">1333MHz</td>
</tr>
<tr id="Memory4" class="part_detail">
<td class="name">Memory4</td>
<td class="status">Discontinued</td>
<td class="capacity">4GB</td>
<td class="speed">1000MHz</td>
</tr>
<tr id="Memory5" class="part_detail">
<td class="name">Memory5</td>
<td class="status">Shipping</td>
<td class="capacity">4GB</td>
<td class="speed">1333MHz</td>
</tr>
</tbody>
</table>
var oData = $("tbody tr.part_detail");
$(":checkbox.prod_status").change(function() {
var checkedValues = $(":checkbox.prod_status:checked").map(function() {
return this.value;
}).get();
if (checkedValues.length > 0) {
oData.hide();
for (var i = 0; i < checkedValues.length; i++) {
oData.filter(function() {
if (checkedValues[i].toString() == $(this).find('.status').text())
$(this).show();
});
}
}
else
$("tbody tr.part_detail").show();
});
私はそれをステータスカテゴリで動作させることしかできませんでした。その後は基本的に立ち往生しました。物事を必要以上に複雑にしてしまった気がしますが、私の jQuery の経験はそれを改善するのに十分ではありません。
要件を次のように要約します。
- チェックボックスがチェックされていない場合、すべての行が表示されます
- カテゴリ内の 1 つ以上のチェック ボックスがオンになっている場合、そのカテゴリ内の選択された値に一致するすべてのレコードが表示されます。
- 他のカテゴリの 1 つ以上のチェック ボックスがオンになっている場合、すべてのカテゴリに一致するレコードのみが表示されます。
つまり、論理 AND は異なるカテゴリ間で適用され、論理 OR はカテゴリ内で適用されます。
どんな助けでも大歓迎です。