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
?
Da sich die Frage auf ein einzelnes Element bezieht, könnte dieser Code besser geeignet sein:
// Checks CSS content for display:[none|block], ignores visibility:[true|false]
$(element).is(":visible");
// The same works with hidden
$(element).is(":hidden");
Es ist dasselbe wie Vorschlag von Twernt aber auf ein einziges Element angewendet; und es entspricht dem in den jQuery-FAQ empfohlenen Algorithmus .
Wir verwenden jQuery's is() um das ausgewählte Element mit einem anderen Element, Selektor oder einem beliebigen jQuery-Objekt zu überprüfen. Diese Methode durchläuft die DOM-Elemente, um eine Übereinstimmung zu finden, die den übergebenen Parameter erfüllt. Sie gibt true zurück, wenn es eine Übereinstimmung gibt, andernfalls false.
Diese Lösung würde offenbar die Verbrennung von visible=false
y display:none
während die Lösung von Mote eindeutig die Absicht der Programmierer verdeutlicht, die display:none
(über die Erwähnung von Ausblenden und Einblenden, welche Kontrolle display:none
nicht visible=true
)
Tsvetomir, das funktioniert nicht für IE7 - selbst wenn die Elemente ausgeblendet sind, denkt er, dass visible=true ist. Bitte korrigieren Sie Ihre Antwort, um Irreführungen zu vermeiden. visible und display sind unterschiedliche Eigenschaften und sollten als solche behandelt werden. Die Antwort von Mote ist die richtige.
Da haben Sie recht - ich werde klarstellen, dass der Code nur auf die display
Eigentum. In Anbetracht der Tatsache, dass sich die ursprüngliche Frage auf show()
y hide()
und sie setzen display
ist meine Antwort richtig. Übrigens funktioniert es auch mit dem IE7, hier ist ein Testschnipsel - jsfiddle.net/MWZss ;
Seien Sie einfach vorsichtig, es gibt einige gute Tipps zur Leistung in dieser Präsentation: addyosmani.com/jqprovenperformance
Auf den Seiten 21 bis 28 wird gezeigt, wie langsam :hidden oder :visible im Vergleich zu anderen Selektoren ist. Vielen Dank für diesen Hinweis.
Wenn man es mit ein paar Elementen zu tun hat und sehr wenig los ist - d.h. in der ABSURDEN MEHRHEIT der Fälle - ist die Zeitfrage eine lächerlich geringe Sorge. Oh, nein! Es dauerte 42 ms statt 19 ms!!!
if ( $(element).css('display') == 'none' || $(element).css("visibility") == "hidden"){
// 'element' is hidden
}
Bei der obigen Methode wird die Sichtbarkeit des Elternteils nicht berücksichtigt. Um auch das Elternteil zu berücksichtigen, sollten Sie .is(":hidden")
ou .is(":visible")
.
Zum Beispiel,
<div id="div1" style="display:none">
<div id="div2" style="display:block">Div2</div>
</div>
Die obige Methode berücksichtigt
div2
sichtbar während:visible
nicht. Aber die oben genannten könnte in vielen Fällen nützlich sein, vor allem, wenn Sie brauchen, um herauszufinden, ob es einen Fehler divs sichtbar in der versteckten Eltern, weil in solchen Bedingungen:visible
wird nicht funktionieren.
Dies prüft nur die Anzeigeeigenschaft eines einzelnen Elements. Das Attribut :visible prüft auch die Sichtbarkeit der übergeordneten Elemente.
@chiborg Ja, aber manchmal ist es das, was man will, und ich musste auf die harte Tour lernen, wie "clever" jQuery war...
Keine dieser Antworten geht auf das ein, was ich als die Frage verstehe, nach der ich gesucht habe, "Wie gehe ich mit Gegenständen um, die eine visibility: hidden
?" . Weder :visible
noch :hidden
wird dies übernehmen, da beide nach der Dokumentation nach einer Anzeige suchen. Soweit ich feststellen konnte, gibt es keinen Selektor für CSS-Sichtbarkeit zu behandeln. Hier ist, wie ich es aufgelöst (Standard jQuery Selektoren, kann es eine komprimierte Syntax sein):
$(".item").each(function() {
if ($(this).css("visibility") == "hidden") {
// handle non visible state
} else {
// handle visible state
}
});
Diese Antwort ist gut zu handhaben visibility
wörtlich, aber die Frage war How you would test if an element has been hidden or shown using jQuery?
. Die Verwendung von jQuery bedeutet: die display
Eigentum.
Elemente mit visibility: hidden
o opacity: 0
gelten als sichtbar, da sie noch Platz im Layout beanspruchen. Siehe Antwort von Pedro Rainho y jQuery-Dokumentation über die :visible
Selektor.
Von Wie kann ich den Zustand eines umgeschalteten Elements bestimmen?
Sie können feststellen, ob ein Element zugeklappt ist oder nicht, indem Sie die :visible
et :hidden
Selektoren.
var isVisible = $('#myDiv').is(':visible');
var isHidden = $('#myDiv').is(':hidden');
Wenn Sie einfach auf ein Element auf der Grundlage seiner Sichtbarkeit einwirken, können Sie einfach die :visible
ou :hidden
im Selektorausdruck. Zum Beispiel:
$('#myDiv:visible').animate({left: '+=200px'}, 'slow');
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/