jquery foreach ループで show() 要素のみを取得する必要があります
以下のコードでは、クラス テスト (つまり、非表示と表示の両方) を持つすべての要素を取得しています...しかし、非表示ではなく表示のみが必要です...この行自体でそれをフィルタリングして取得する方法?????
$('.element').find('.test').each(function(index, loopelement) {
}
jquery foreach ループで show() 要素のみを取得する必要があります
以下のコードでは、クラス テスト (つまり、非表示と表示の両方) を持つすべての要素を取得しています...しかし、非表示ではなく表示のみが必要です...この行自体でそれをフィルタリングして取得する方法?????
$('.element').find('.test').each(function(index, loopelement) {
}
:visible
セレクターを使用します。
$('.element').find('.test:visible').each(function(index, loopelement) {
// do stuff...
});
jQuery の :visibleセレクターを使用できます。
var $visibles = $(".element").find(".test:visible");
ただし、jQuery の仕組みに注意してください。jQueryのドキュメントから:
ドキュメント内のスペースを消費する場合、要素は可視と見なされます。可視要素の幅または高さが 0 より大きい。
可視性: 非表示または不透明度: 0 の要素は、レイアウト内のスペースを消費するため、可視と見なされます。
この動作がユース ケースに合わない場合は、jQuery を拡張して、独自のカスタム セレクターを作成できます。
$.expr[":"].reallyVisible =
function reallyVisible (elem) {
if (elem == null || elem.tagName == null) {
return false;
}
if (elem.tagName.toLowerCase() === "script" || elem.tagName.toLowerCase() === "input" && elem.type === "hidden") {
return false;
}
do {
if (!isVisible(elem)) {
return false;
}
elem = elem.parentNode;
} while (elem != null && elem.tagName.toLowerCase() !== "html");
return true;
};
function isVisible (elem) {
var style = elem.style;
// Depending on your use case
// you could check the height/width, or if it's in the viewport...
return !(style.display === "none" || style.opacity === "0" || style.visibility === "hidden");
}
他の組み込みセレクターとして使用できます。
$(".element").find(".test:reallyVisible");
$(".element").find(".test:first").is(":reallyVisible");