Ist es möglich, die Sichtbarkeit eines Elements umzuschalten, indem man die Funktionen .hide()
, .show()
ou .toggle()
?
Wie würden Sie testen, ob ein Element visible
ou hidden
?
Ist es möglich, die Sichtbarkeit eines Elements umzuschalten, indem man die Funktionen .hide()
, .show()
ou .toggle()
?
Wie würden Sie testen, ob ein Element visible
ou hidden
?
Es gibt mehrere Möglichkeiten zu prüfen, ob ein Element in jQuery sichtbar oder verborgen ist.
Demo-HTML als Referenzbeispiel
<div id="content">Content</div>
<div id="content2" style="display:none">Content2</div>
Sichtbarkeitsfilterauswahl verwenden $('element:hidden')
ou $('element:visible')
$('element:hidden')
: Markiert alle Elemente, die ausgeblendet sind.
Example:
$('#content2:hidden').show();
$('element:visible')
: Wählt alle Elemente aus, die sichtbar sind.
Example:
$('#content:visible').css('color', '#EEE');
Lesen Sie mehr unter http://api.jquery.com/category/selectors/visibility-filter-selectors/
Utilisez is()
Filtern
Example:
$('#content').is(":visible").css('color', '#EEE');
Or checking condition
if ($('#content').is(":visible")) {
// Perform action
}
Lesen Sie mehr unter http://api.jquery.com/is/
Dies ist der Weg jQuery löst dieses Problem intern:
jQuery.expr.pseudos.visible = function( elem ) {
return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
};
Wenn Sie jQuery nicht verwenden, können Sie diesen Code einfach nutzen und ihn in Ihre eigene Funktion umwandeln:
function isVisible(elem) {
return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
};
Welche isVisible
wird zurückgegeben true
so lange das Element sichtbar ist.
Sie können dies verwenden:
$(element).is(':visible');
$(document).ready(function()
{
$("#toggle").click(function()
{
$("#content").toggle();
});
$("#visiblity").click(function()
{
if( $('#content').is(':visible') )
{
alert("visible"); // Put your code for visibility
}
else
{
alert("hidden");
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
<p id="content">This is a Content</p>
<button id="toggle">Toggle Content Visibility</button>
<button id="visibility">Check Visibility</button>
Ich möchte nur klarstellen, dass in jQuery,
Elemente können aus verschiedenen Gründen als verborgen betrachtet werden:
- Sie haben einen CSS-Anzeigewert von none.
- Es handelt sich um Formularelemente mit type="hidden".
- Ihre Breite und Höhe werden ausdrücklich auf 0 gesetzt.
- Ein Vorgängerelement wird ausgeblendet, d. h. das Element wird auf der Seite nicht angezeigt.
Elemente mit Sichtbarkeit: ausgeblendet oder Deckkraft: 0 gelten als sichtbar, da sie noch Platz im Layout beanspruchen. Bei Animationen, die ein Element ausblenden, gilt das Element bis zum Ende der Animation als sichtbar.
if($('.element').is(':hidden')) {
// Do something
}
<script>
if ($("#myelement").is(":visible")){alert ("#myelement is visible");}
if ($("#myelement").is(":hidden")){alert ("#myelement is hidden"); }
</script>
$("#myelement div:visible").each( function() {
//Do something
});
So implementiert jQuery diese Funktion:
jQuery.expr.filters.visible = function( elem ) {
return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
};
Mit Element.getBoundingClientRect() können Sie leicht feststellen, ob sich Ihr Element innerhalb der Grenzen Ihres Ansichtsfensters befindet (d.h. onscreen oder offscreen):
jQuery.expr.filters.offscreen = function(el) {
var rect = el.getBoundingClientRect();
return (
(rect.x + rect.width) < 0
|| (rect.y + rect.height) < 0
|| (rect.x > window.innerWidth || rect.y > window.innerHeight)
);
};
Diese können Sie dann auf verschiedene Weise verwenden:
// Returns all elements that are offscreen
$(':offscreen');
// Boolean returned if element is offscreen
$('div').is(':offscreen');
Wenn Sie Angular verwenden, überprüfen Sie das: Verwenden Sie keine versteckten Attribute mit Angular
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
68 Stimmen
Es ist erwähnenswert (auch nach all dieser Zeit), dass
$(element).is(":visible")
funktioniert für jQuery 1.4.4, aber nicht für jQuery 1.3.2, unter Internet Explorer 8 . Dies kann getestet werden mit Tsvetomir Tsonevs hilfreiches Test-Snippet . Denken Sie einfach daran, die Version von jQuery zu ändern, um unter jedem zu testen.5 Stimmen
Dies ist eine verwandte, wenn auch andere Frage: stackoverflow.com/questions/17425543/
2 Stimmen
Wenn Sie nicht an der virtuellen Ausblendung von CSS-Elementen interessiert sind, sondern an der physischen Sichtbarkeit im "Viewport-Bereich" für den Benutzer, dann sollten Sie sich Folgendes ansehen stackoverflow.com/questions/487073/ y stackoverflow.com/questions/123999/