それで、私はアイテム1-4から始めます:
<div class="someDiv bold italic" style="display: none;">Lorem</div>
<div class="someDiv regular italic" style="display: block;">Lorem</div>
<div class="someDiv bold" style="display: none;">Ipsum</div>
<div class="someDiv regular" style="display: block;">Ipsum</div>
次に、いくつかの入力チェックボックスがあります:
<input class="regular" type="checkbox" />
<input class="bold" type="checkbox" />
<input class="italic" type="checkbox" />
基本的に、jQueryにはdivの表示と非表示があります。これで、これらのdiv(チェックボックスごとに1つ)を反復処理し、別の基準に基づいて表示/非表示にする必要がある別の関数ができました。ただし、すでに非表示になっているdivが再び表示されるのは望ましくありません。
$(".someDiv").each(function(){
if($(this).hasClass("regular")){
$(this).show();
} else {
$(this).hide();
};
この例では、残りのdivは最後のdivのみです。残念ながら、このコードは2番目と4番目のdivを表示します。
このコードは、適用、追加などを行うすべてのフィルターの非常に基本的な例です。
:visible
セレクターを使用して、表示されている.someDiv
を選択できます。
$(".someDiv:visible").each(function(){
if($(this).hasClass("regular")){
$(this).show();
} else {
$(this).hide();
}
});
チェーンを利用する別の面白い方法:)とそれを単一行にします。
$('.someDiv:visible').not($('.someDiv.regular:visible')).hide();
これには2つの方法があります:display: none
要素に別のクラスを追加してcssで非表示にするか、jqueryでcssプロパティを見つけることができます
<div class="someDiv bold italic hidden" >Lorem</div>
<div class="someDiv regular italic" >Lorem</div>
<div class="someDiv bold hidden" >Ipsum</div>
<div class="someDiv regular" >Ipsum</div>
.someDiv{
display: block;
}
.hidden{
display: none;
}
$(".someDiv").each(function(){
if($(this).hasClass("hidden")){
$(this).show();
} else {
$(this).hide();
};
$(".someDiv:visible").each(function(){
if($(this).hasClass("regular")){
$(this).show();
} else {
$(this).hide();
}
});
そのために:not()
セレクターを使用し、.each()
に入る前に結果をフィルター処理できます。
$(".someDiv:not(:hidden)").each(function(){