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
?
Denn :not(':hidden') ist nicht dasselbe wie is(':visible'). "Sichtbar" funktioniert mit der CSS-"Opazität", nicht mit JQuery-"show()/hide()". Außerdem gibt es kein zusätzliches Zitat. Jeder Satz spielt in diesem kleinen Code eine Rolle.
1) beide :visible
y :hidden
die Sichtbarkeit von CSS-Elementen und Vorgängern prüfen und nicht nur die display: none
wie Sie jetzt vorschlagen. 2) Zitate innerhalb eines Pseudo-Selektors アール nicht erforderlich, wenn der Selektor nur :
und alphanumerische Zeichen (z. B. :not(:hidden)
ist dasselbe wie not(':hidden')
(nur ein bisschen schneller) und 3) wie wollen Sie besser werden, wenn Sie nicht akzeptieren können, dass Sie manchmal tatsächlich falsch liegen :)
Ich habe danach gesucht, und keine der Antworten ist für meinen Fall korrekt, also habe ich eine Funktion erstellt, die false zurückgibt, wenn die Augen das Element nicht sehen können
jQuery.fn.extend({
isvisible: function() {
//
// This function call this: $("div").isvisible()
// Return true if the element is visible
// Return false if the element is not visible for our eyes
//
if ( $(this).css('display') == 'none' ){
console.log("this = " + "display:none");
return false;
}
else if( $(this).css('visibility') == 'hidden' ){
console.log("this = " + "visibility:hidden");
return false;
}
else if( $(this).css('opacity') == '0' ){
console.log("this = " + "opacity:0");
return false;
}
else{
console.log("this = " + "Is Visible");
return true;
}
}
});
Nur ein Hinweis, wenn der Selektor eine leere Menge von Elementen zurückgibt, wird diese Methode true zurückgeben, so überprüfen Länge zuerst, wenn Sie für unsichtbare Elemente suchen: var items = jQuery('.selector'); if (items.length == 0 || !items.isVisible()) { alert('item is not visible'); }
Als hide()
, show()
et toggle()
fügt dem Element Inline-CSS (display:none oder display:block) hinzu. In ähnlicher Weise können wir den ternären Operator verwenden, um zu prüfen, ob das Element verborgen oder sichtbar ist, indem wir display CSS prüfen.
UPDATE:
So können wir nach der Eigenschaft eines Elements suchen, die es unsichtbar macht. Sie sind also display: none
et visibility: "hidden";
Wir können ein Objekt zur Überprüfung der Eigenschaft erstellen, die für das Ausblenden des Elements verantwortlich ist:
var hiddenCssProps = {
display: "none",
visibility: "hidden"
}
Wir können überprüfen, indem wir in einer Schleife jeden Schlüsselwert im Objekt abgleichen, ob die Elementeigenschaft für den Schlüssel mit dem Wert der verborgenen Eigenschaft übereinstimmt.
var isHidden = false;
for(key in hiddenCssProps) {
if($('#element').css(key) == hiddenCssProps[key]) {
isHidden = true;
}
}
Wenn Sie Eigenschaften wie Elementhöhe: 0 oder Breite: 0 oder mehr überprüfen möchten, können Sie dieses Objekt erweitern und weitere Eigenschaften hinzufügen und überprüfen können.
Prüfen Sie einfach, ob das Element sichtbar und es wird ein boolean . jQuery versteckt die Elemente durch Hinzufügen von keine Anzeige auf das Element, wenn Sie also reines JavaScript verwenden wollen, können Sie das zum Beispiel immer noch tun:
if (document.getElementById("element").style.display === 'block') {
// Your element is visible; do whatever you'd like
}
Sie können auch jQuery verwenden, da es scheint, dass der Rest Ihres Codes verwendet wird, und Sie haben kleinere Code-Block. Etwas wie das unten in jQuery tut den gleichen Trick für Sie:
if ($(element).is(":visible")) {
// Your element is visible, do whatever you'd like
};
Auch die Verwendung des css
Methode in jQuery kann zum gleichen Ergebnis führen:
if ($(element).css('display') === 'block') {
// Your element is visible, do whatever you'd like
}
Auch bei der Überprüfung der Sichtbarkeit und Anzeige können Sie wie folgt vorgehen:
if ($(this).css("display") === "block" || $(this).css("visibility") === "visible") {
// Your element is visible, do whatever you'd like
}
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/