8662 Stimmen

Wie prüfe ich, ob ein Element in jQuery ausgeblendet ist?

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 ?

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/

10241voto

Tsvetomir Tsonev Punkte 103396

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.

182 Stimmen

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 )

2 Stimmen

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.

51 Stimmen

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 ;

1624voto

twernt Punkte 19773

Sie können die hidden Selektor:

// Matches all elements that are hidden
$('element:hidden')

Und die visible Selektor:

// Matches all elements that are visible
$('element:visible')

71 Stimmen

Seien Sie einfach vorsichtig, es gibt einige gute Tipps zur Leistung in dieser Präsentation: addyosmani.com/jqprovenperformance

29 Stimmen

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.

116 Stimmen

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!!!

1097voto

Mote Punkte 10797
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.

138 Stimmen

Dies prüft nur die Anzeigeeigenschaft eines einzelnen Elements. Das Attribut :visible prüft auch die Sichtbarkeit der übergeordneten Elemente.

17 Stimmen

Dies ist die einzige Lösung, die bei mir beim Testen mit IE 8 funktioniert hat.

21 Stimmen

@chiborg Ja, aber manchmal ist es das, was man will, und ich musste auf die harte Tour lernen, wie "clever" jQuery war...

593voto

aaronLile Punkte 5727

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
    }
});

23 Stimmen

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.

13 Stimmen

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.

10 Stimmen

Müssen Sie das DOM nach oben durchlaufen, um die Eltern des Knotens zu überprüfen, sonst ist dies nutzlos.

434voto

user574889 Punkte 4189

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');

6 Stimmen

Ich frage mich, warum keine Antwort den Fall erwähnt, dass ein Element vom sichtbaren Fenster wegbewegt wird, wie top:-1000px ... Ich schätze, das ist ein Grenzfall

CodeJaeger.com

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.

Powered by:

X