Ist es möglich, die Sichtbarkeit eines Elements mithilfe der Funktionen umzuschalten .hide()
, .show()
oder .toggle()
?
Wie würden Sie testen, ob ein Element ist visible
oder hidden
?
javascript
jquery
dom
visibility
Philip Morton
quelle
quelle
$(element).is(":visible")
für jQuery 1.4.4 funktioniert, nicht jedoch für jQuery 1.3.2 unter Internet Explorer 8 . Dies kann mit Tsvetomir Tsonevs hilfreichem Test-Snippet getestet werden . Denken Sie daran, die Version von jQuery zu ändern, um sie unter jeder Version zu testen.Antworten:
Da sich die Frage auf ein einzelnes Element bezieht, ist dieser Code möglicherweise besser geeignet:
Es ist dasselbe wie der Vorschlag von twernt , wird jedoch auf ein einzelnes 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. Es wird true zurückgegeben, wenn eine Übereinstimmung vorliegt, andernfalls wird false zurückgegeben.
quelle
visible=false
und zu förderndisplay:none
; in der Erwägung, dass die Lösung von Mote die Absicht der Programmierer, die zu überprüfen, eindeutig verleumdetdisplay:none
; (durch Erwähnung von verstecken und zeigen, welche Kontrolledisplay:none
nichtvisible=true
):visible
prüft aber auch, ob die übergeordneten Elemente sichtbar sind, wie Chiborg hervorhob.display
Eigenschaft prüft . Angesichts der Tatsache, dass die ursprüngliche Frage fürshow()
undhide()
ist und sie gesetzt sinddisplay
, ist meine Antwort richtig. Übrigens funktioniert es mit IE7, hier ist ein Test-Snippet - jsfiddle.net/MWZss ;Sie können den
hidden
Selektor verwenden:Und der
visible
Selektor:quelle
type="hidden"
ist nur ein Fall, der ausgelöst werden kann: versteckt. Elemente ohne Höhe und Breite, Elemente mitdisplay: none
und Elemente mit versteckten Vorfahren gelten auch als: versteckt.Die obige Methode berücksichtigt nicht die Sichtbarkeit des übergeordneten Elements. Um auch die Eltern zu berücksichtigen, sollten Sie
.is(":hidden")
oder verwenden.is(":visible")
.Zum Beispiel,
quelle
hide()
,show()
undtoggle()
Funktionen, aber, wie die meisten haben bereits gesagt, sollten wir die Verwendung:visible
und:hidden
Pseudo-Klassen.Keine dieser Antworten befasst sich mit dem, was ich als die Frage verstehe, nach der ich gesucht habe: "Wie gehe ich mit Gegenständen um, die haben
visibility: hidden
?" . Weder:visible
noch:hidden
wird dies behandelt, da beide nach einer Anzeige gemäß der Dokumentation suchen. Soweit ich feststellen konnte, gibt es keinen Selektor für die CSS-Sichtbarkeit. Hier ist, wie ich es gelöst habe (Standard-jQuery-Selektoren, möglicherweise gibt es eine komprimiertere Syntax):quelle
visibility
buchstäblich gut zu handhaben , aber die Frage warHow you would test if an element has been hidden or shown using jQuery?
. Die Verwendung von jQuery bedeutet: diedisplay
Eigenschaft.visibility: hidden
oderopacity: 0
gelten als sichtbar, da sie im Layout noch Platz beanspruchen. Siehe Antwort von Pedro Rainho und jQuery-Dokumentation auf dem:visible
Selektor.Aus Wie bestimme ich den Status eines umgeschalteten Elements?
Mit den Selektoren
:visible
und können Sie bestimmen, ob ein Element reduziert ist oder nicht:hidden
.Wenn Sie sich einfach auf ein Element wirkt , auf der Grundlage seiner Sicht, können Sie einfach schließen
:visible
oder:hidden
in der Auswahl Ausdruck. Zum Beispiel:quelle
top:-1000px
Wenn Sie prüfen, ob etwas sichtbar ist oder nicht, werden Sie häufig sofort weitermachen und etwas anderes damit tun. Die jQuery-Verkettung macht dies einfach.
Wenn Sie also einen Selektor haben und nur dann eine Aktion ausführen möchten, wenn dieser sichtbar oder ausgeblendet ist, können Sie ihn verwenden
filter(":visible")
oderfilter(":hidden")
anschließend mit der gewünschten Aktion verketten.Also anstelle einer
if
Aussage wie dieser:Oder effizienter, aber noch hässlicher:
Sie können alles in einer Zeile erledigen:
quelle
Der
:visible
Selektor gemäß der jQuery-Dokumentation :Dies ist in einigen Fällen nützlich und in anderen Fällen nutzlos. Wenn Sie überprüfen möchten, ob das Element sichtbar ist (
display != none
), und die Sichtbarkeit der Eltern ignorieren, werden Sie feststellen, dass dies.css("display") == 'none'
nicht nur schneller ist, sondern auch die Sichtbarkeitsprüfung korrekt zurückgibt.Wenn Sie die Sichtbarkeit anstelle der Anzeige überprüfen möchten, sollten Sie Folgendes verwenden :
.css("visibility") == "hidden"
.Berücksichtigen Sie auch die zusätzlichen jQuery-Hinweise :
Wenn Sie sich Sorgen um die Leistung machen, sollten Sie Folgendes überprüfen: Jetzt sehen Sie mich… Leistung ein- / ausblenden (04.05.2010). Verwenden Sie andere Methoden, um Elemente anzuzeigen und auszublenden.
quelle
Dies funktioniert für mich und ich benutze
show()
undhide()
mache mein Div versteckt / sichtbar:quelle
Funktionsweise von Elementsichtbarkeit und jQuery ;
Ein Element kann mit oder ausgeblendet
display:none
werden . Der Unterschied zwischen diesen Methoden:visibility:hidden
opacity:0
display:none
verbirgt das Element und nimmt keinen Platz ein;visibility:hidden
verbirgt das Element, nimmt aber dennoch Platz im Layout ein;opacity:0
verbirgt das Element als "Sichtbarkeit: versteckt" und nimmt dennoch Platz im Layout ein; Der einzige Unterschied besteht darin, dass man durch die Deckkraft ein Element teilweise transparent machen kann.Nützliche jQuery-Umschaltmethoden:
quelle
visibility:hidden
undopacity:0
besteht darin, dass das Element weiterhin auf Ereignisse (wie Klicks) mit reagiertopacity:0
. Ich habe diesen Trick gelernt, indem ich eine benutzerdefinierte Schaltfläche für das Hochladen von Dateien erstellt habe.Sie können dies auch mit einfachem JavaScript tun:
Anmerkungen:
Funktioniert überall
Funktioniert für verschachtelte Elemente
Funktioniert für CSS- und Inline-Stile
Benötigt kein Framework
quelle
visibility: hidden
als sichtbar .Ich würde CSS-Klasse verwenden
.hide { display: none!important; }
.Zum Verstecken rufe ich an
.addClass("hide")/.removeClass("hide")
. Zur Überprüfung der Sichtbarkeit verwende ich.hasClass("hide")
.Es ist eine einfache und übersichtliche Möglichkeit, Elemente zu überprüfen / auszublenden / anzuzeigen, wenn Sie keine Methoden
.toggle()
oder.animate()
Methoden verwenden möchten.quelle
.hasClass('hide')
prüft nicht, ob ein Vorfahr des Elternteils ausgeblendet ist (wodurch es auch ausgeblendet würde). Sie könnten dies möglicherweise richtig funktionieren lassen, indem Sie prüfen, ob.closest('.hide').length > 0
, aber warum das Rad neu erfinden?Demo Link
Quelle:
Blogger Plug n Play - jQuery-Tools und -Widgets: So sehen Sie mithilfe von jQuery, ob das Element ausgeblendet oder sichtbar ist
quelle
Man kann einfach das Attribut
hidden
oder verwendenvisible
, wie:Oder Sie können das gleiche mit vereinfachen heißt wie folgt.
quelle
ebdiv
sollte auf eingestellt werdenstyle="display:none;"
. Es funktioniert sowohl zum Ein- als auch zum Ausblenden:quelle
Eine andere Antwort, die Sie in Betracht ziehen sollten, ist, wenn Sie ein Element ausblenden , sollten Sie jQuery verwenden , aber anstatt es tatsächlich auszublenden, entfernen Sie das gesamte Element, kopieren jedoch den HTML- Inhalt und das Tag selbst in eine jQuery-Variable und dann Alles, was Sie tun müssen, ist zu testen, ob ein solches Tag auf dem Bildschirm angezeigt wird
if (!$('#thetagname').length)
.quelle
Beim Testen eines Elements gegen den
:hidden
Selektor in jQuery sollte berücksichtigt werden, dass ein absolut positioniertes Element möglicherweise als ausgeblendet erkannt wird, obwohl seine untergeordneten Elemente sichtbar sind .Dies scheint in erster Linie etwas kontraintuitiv zu sein - ein genauerer Blick auf die jQuery-Dokumentation liefert jedoch die relevanten Informationen:
Dies ist also tatsächlich sinnvoll in Bezug auf das Box-Modell und den berechneten Stil für das Element. Auch wenn Breite und Höhe nicht explizit auf 0 gesetzt sind, können sie implizit gesetzt werden .
Schauen Sie sich das folgende Beispiel an:
Update für jQuery 3.x:
Mit jQuery 3 ändert sich das beschriebene Verhalten! Elemente werden als sichtbar betrachtet, wenn sie Layoutfelder haben, einschließlich solcher mit einer Breite und / oder Höhe von Null.
JSFiddle mit jQuery 3.0.0-alpha1:
http://jsfiddle.net/pM2q3/7/
Der gleiche JavaScript-Code hat dann folgende Ausgabe:
quelle
Dies kann funktionieren:
quelle
Beispiel:
quelle
Um zu überprüfen, ob es nicht sichtbar ist, benutze ich
!
:Oder das Folgende ist auch das Sam, das den jQuery-Selektor in einer Variablen speichert, um eine bessere Leistung zu erzielen, wenn Sie ihn mehrmals benötigen:
quelle
Verwenden Sie das Umschalten von Klassen und nicht die Stilbearbeitung. . .
Die Verwendung von Klassen zum "Ausblenden" von Elementen ist einfach und auch eine der effizientesten Methoden. Das Umschalten einer 'versteckten' Klasse mit dem
Display
Stil 'Keine' ist schneller als das direkte Bearbeiten dieses Stils. Ich habe einige davon ziemlich gründlich in der Frage zum Stapelüberlauf erklärt. Zwei Elemente im selben Div sichtbar / versteckt machen .Best Practices und Optimierung für JavaScript
Hier ist ein wirklich aufschlussreiches Video eines Google Tech Talk von Google-Front-End-Ingenieur Nicholas Zakas:
quelle
Beispiel für die Verwendung der sichtbaren Prüfung für Adblocker ist aktiviert:
"ablockercheck" ist eine ID, die der Adblocker blockiert. Wenn Sie also überprüfen, ob es sichtbar ist, können Sie feststellen, ob der Adblocker aktiviert ist.
quelle
Schließlich passt keines der Beispiele zu mir, also habe ich mein eigenes geschrieben.
Tests (keine Unterstützung von Internet Explorer
filter:alpha
):a) Überprüfen Sie, ob das Dokument nicht ausgeblendet ist
b) Überprüfen Sie, ob ein Element eine Breite / Höhe / Deckkraft von Null oder
display:none
/visibility:hidden
in Inline-Stilen aufweistc) Überprüfen Sie, ob die Mitte (auch weil sie schneller ist als das Testen jedes Pixels / jeder Ecke) des Elements nicht von einem anderen Element (und allen Vorfahren) ausgeblendet wird. Beispiel:
overflow:hidden
/ scroll / ein Element über ein anderes) oder Bildschirmkanten ausgeblendet wirdd) Überprüfen Sie, ob ein Element eine Breite / Höhe / Deckkraft oder
display:none
Sichtbarkeit von Null hat : versteckt in berechneten Stilen (unter allen Vorfahren)Getestet am
Android 4.4 (nativer Browser / Chrome / Firefox), Firefox (Windows / Mac), Chrome (Windows / Mac), Opera (Windows Presto / Mac WebKit), Internet Explorer (Internet Explorer 5-11 Dokumentmodi + Internet Explorer 8 auf einem virtuelle Maschine) und Safari (Windows / Mac / iOS).
Wie benutzt man:
quelle
Sie müssen sowohl ... Anzeige als auch Sichtbarkeit überprüfen:
Wenn wir nach
$(this).is(":visible")
suchen, prüft jQuery automatisch nach beiden Dingen.quelle
Vielleicht kannst du so etwas machen
quelle
Überprüfen Sie einfach die Sichtbarkeit, indem Sie nach einem booleschen Wert suchen, wie z.
Ich habe diesen Code für jede Funktion verwendet. Andernfalls können Sie
is(':visible')
die Sichtbarkeit eines Elements überprüfen.quelle
Weil
Elements with visibility: hidden or opacity: 0 are considered visible, since they still consume space in the layout
(wie für jQuery beschrieben: sichtbarer Selektor ) - wir können auf diese Weise überprüfen, ob das Element wirklich sichtbar ist:quelle
Was aber, wenn das CSS des Elements wie folgt aussieht?
Daher sollte auch diese Antwort auf die Frage zum Stapelüberlauf berücksichtigt werden, wie überprüft werden kann, ob ein Element außerhalb des Bildschirms liegt .
quelle
Es kann eine Funktion erstellt werden, um die Sichtbarkeits- / Anzeigeattribute zu überprüfen und festzustellen, ob das Element in der Benutzeroberfläche angezeigt wird oder nicht.
Geige arbeiten
quelle
Hier ist auch ein ternärer bedingter Ausdruck, um den Status des Elements zu überprüfen und dann umzuschalten:
quelle
$('elementToToggle').toggle('slow');
...:)
quelle