この質問は、この質問をさらに発展させたものです。
ManseUKによって優れた回答が得られたdiv (製品フィルタリング)を表示および非表示にするjQueryの単純なチェックボックス
ManseUKのソリューションでは、単一のカテゴリ、特にジャンルによる製品フィルタリングが可能でしたが、現在のプロジェクトでは、色とサイズの2つのカテゴリで並べ替える必要があります。ManseUKのソリューションを変更することで、ほぼ機能しますが、2つのフィルターを選択すると失敗します。この例では、「cyan」と「xl」を選択すると、xlシアンのみが表示され、代わりにxlシアンだけでなく両方のシアンが表示されます。私が使用しているコードは次のとおりです。
HTML:
<input type="checkbox" id="cyan" value="cyan" /> Cyan<br />
<input type="checkbox" id="magenta" value="magenta" /> Magenta<br />
<input type="checkbox" id="black" value="black" /> Black<br />
<input type="checkbox" id="xl" value="xl" /> XL<br />
<!--------------------->
<div class="products">
<div class="productItem" data-price="250" data-category="cyan">
Cyan Ink
<div class="productItemPrice"><span>£250</span></div>
</div>
<div class="productItem" data-price="150" data-category="magenta">
Magenta Ink
<div class="productItemPrice"><span>£150</span></div>
</div>
<div class="productItem" data-price="250" data-category="black">
Black Ink <div class="productItemPrice"><span>£250</span></div>
</div>
<div class="productItem" data-price="241" data-category="cyan" data-size="xl">
XL Cyan Ink
<div class="productItemPrice"><span>£241</span></div>
</div>
</div>
<!--------------------->
CSS:
.productItem{float:left;padding:5px;margin:5px;border:1px solid #eaeaea}
body{font-family:verdana}
JS:
$('input[type="checkbox"]').click(function() {
if ($('input[type="checkbox"]:checked').length > 0) {
$('.products >div').hide();
$('input[type="checkbox"]:checked').each(function() {
$('.products >div[data-category=' + this.id + ']').show();
$('.products >div[data-size=' + this.id + ']').show();
});
} else {
$('.products >div').show();
}
});
jsが論理和を実行していることがわかります-どのdivを表示するか-これをANDにするにはどうすればよいですか?