更新: Jared の答えは解決策でした。これが私のコードです。実際に一致するセットがあった場合にリスト項目の非表示/表示を実行するために、else ステートメントを追加したところです。
$(document).ready(function() {
$("form#filterForm").submit(function () {
var type = $("select#typeList option:selected").val();
var style = $("select#styleList option:selected").val();
var items = $(".container .content ul li").filter('.' + type + '.' + style);
if (!items.length) {
alert('no items...');
return false;
} else {
$(".container .content ul li").hide();
$(".container .content ul li"+type+style).show();
mCustomScrollbars();
return false;
}
});
});
更新を終了します。いくつかのコードが機能していますが、最終ステップに進むのに問題があります。順序付けられていないリストにサムネイルのリストがあります。
<div class="content">
<ul>
<li class="portfolio_images type-portfolio_images category-commercial category-traditional"><img src="thumb_test-image1.jpg" /></li><li class="portfolio_images category-residential category-contemporary"><img src="thumb_test-image2.jpg" /></li><li class="portfolio_images type-portfolio_images category-commercial category-contemporary"><img src="thumb_test-image3.jpg" /></li><li class="portfolio_images type-portfolio_images category-commercial" ><img src="res1-2-THUMB.jpg" /></li><li class="portfolio_images type-portfolio_images category-interior-design"><img src="res1-2-THUMB.jpg" /></li><li class="portfolio_images type-portfolio_images category-interior-design"><img src="res3-3-THUMB.jpg" /></li><li class="portfolio_images type-portfolio_images category-residential category-contemporary" ><img src="thumb_test-image2.jpg" /></li><li class="portfolio_images type-portfolio_images category-commercial category-traditional"><img src="thumb_test-image1.jpg" /></li><li class="portfolio_images type-portfolio_images category-interior-design" ><img src="res1-2-THUMB.jpg" /></li><li class="portfolio_images type-portfolio_images category-commercial category-contemporary"><img src="thumb_test-image3.jpg" /></li><li class="portfolio_images type-portfolio_images category-interior-design"><img src="res1-2-THUMB.jpg" /></li>
</ul>
</div>
各リスト項目には複数のカテゴリがあります。2 つの選択フィールドを含むフォームがあり、jQuery を使用して、リスト項目の classNames に対応する選択フィールドの値を取得しています。これらは変数として設定され、それに応じてリスト項目を表示および非表示にするために使用されます。 .
<form id="filterForm" action="">
<select id="typeList" name="typeList">
<option value=".portfolio_images">All</option>
<option value=".category-commercial">category-commercial</option>
<option value=".category-residential">category-residential</option>
</select>
<select id="styleList" name="typeList">
<option value=".type-portfolio_images">All</option>
<option value=".category-traditional">category-traditional</option>
<option value=".category-contemporary">category-contemporary</option>
</select>
<input id="submit_btn" type="submit" value="submit" label="submit" /> </form>
<script>
$(document).ready(function() {
$("form#filterForm").submit(function () {
var $selectTypeClass=$("select#typeList option:selected").val();
var $selectStyleClass=$("select#styleList option:selected").val();
$(".container .content ul li").not($selectTypeClass+$selectStyleClass).hide();
$(".container .content ul li"+$selectTypeClass+$selectStyleClass).show();
mCustomScrollbars();
return false;
});
});
</script>
これは本当にうまくいきます。ただし、アイテムに 1 つのカテゴリがあり、他のカテゴリがない場合がいくつかあります。だから私がやろうとしているのは、テストまたはチェックして、選択した両方のクラスに一致するアイテムがないことを確認し、警告メッセージを表示することです(「両方の選択に一致するアイテムはありません」など)。そうではなく、両方に一致するものがある場合は、先に進み、通常どおり機能を実行します。
each() を使用してテストしようとしたため、問題が発生していますが、リストをループして常にアラートを返すため、機能しませんでした-基本的に最初に停止するためです
では、選択した両方のクラスに一致するアイテムがないかどうかを確認するように設定するにはどうすればよいでしょうか? each() で発生する反復とは対照的に、何らかの方法でセット全体にインデックスを付けて全体としてチェックする必要がありますか? ここで困惑しました-どんな助けでも、私は前もって感謝します.