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
?
Wenn man prüft, ob etwas sichtbar ist oder nicht, geht man oft gleich weiter und macht etwas anderes damit. jQuery chaining macht dies einfach.
Wenn Sie also einen Selektor haben und eine Aktion nur dann ausführen wollen, wenn er sichtbar oder versteckt ist, können Sie filter(":visible")
ou filter(":hidden")
gefolgt von der Verkettung mit der Aktion, die Sie durchführen möchten.
Anstelle einer if
Aussage, etwa so:
if ($('#btnUpdate').is(":visible"))
{
$('#btnUpdate').animate({ width: "toggle" }); // Hide button
}
Oder effizienter, aber noch hässlicher:
var button = $('#btnUpdate');
if (button.is(":visible"))
{
button.animate({ width: "toggle" }); // Hide button
}
Sie können das alles in einer Zeile machen:
$('#btnUpdate').filter(":visible").animate({ width: "toggle" });
Es gibt keinen Grund, den DOM-Knoten in dem im Beispiel verwendeten Schnipsel zu extrahieren, um ihn dann erneut nachzuschlagen. Besser ist es, einfach zu tun: var $button = $('#btnUpdate'); Und dann in den If-Ausdrücken einfach $button anstelle von $(button) verwenden. Das hat den Vorteil, dass das jQuery-Objekt zwischengespeichert wird.
Le site :visible
Selektor nach die jQuery-Dokumentation :
- Sie haben ein CSS
display
Wert vonnone
.- Sie sind Formularelemente mit
type="hidden"
.- Ihre Breite und Höhe werden ausdrücklich auf 0 gesetzt.
- Ein Vorgängerelement ist ausgeblendet, d. h. das Element wird auf der Seite nicht angezeigt.
Elemente mit
visibility: hidden
ouopacity: 0
gelten als sichtbar, da sie noch Platz im Layout beanspruchen.
Dies ist in einigen Fällen nützlich und in anderen nutzlos, denn wenn Sie prüfen wollen, ob das Element sichtbar ist ( display != none
), wobei die Sichtbarkeit der Eltern ignoriert wird, werden Sie feststellen, dass die .css("display") == 'none'
ist nicht nur schneller, sondern gibt auch die Sichtbarkeitsprüfung korrekt zurück.
Wenn Sie die Sichtbarkeit statt der Anzeige prüfen wollen, sollten Sie dies tun: .css("visibility") == "hidden"
.
Berücksichtigen Sie auch die zusätzlichen jQuery-Hinweise :
Denn
:visible
ist eine jQuery-Erweiterung und nicht Teil der CSS-Spezifikation, Abfragen mit:visible
nicht von der Leistungssteigerung durch das native DOM profitieren könnenquerySelectorAll()
Methode. Um die beste Leistung zu erzielen, wenn Sie:visible
um Elemente auszuwählen, wählen Sie die Elemente zunächst mit einem reinen CSS-Selektor aus und verwenden dann.filter(":visible")
.
Wenn Sie sich Sorgen um die Leistung machen, sollten Sie außerdem Folgendes prüfen Jetzt siehst du mich Leistung anzeigen/verbergen (2010-05-04). Und verwenden Sie andere Methoden zum Ein- und Ausblenden von Elementen.
Wie Element Sichtbarkeit und jQuery funktioniert ;
Ein Element kann versteckt werden mit display:none
, visibility:hidden
ou opacity:0
. Der Unterschied zwischen diesen Methoden:
display:none
blendet das Element aus, so dass es keinen Platz beansprucht;visibility:hidden
blendet das Element aus, aber es nimmt weiterhin Platz im Layout ein;opacity:0
verbirgt das Element als "visibility:hidden", und es nimmt immer noch Platz im Layout ein; der einzige Unterschied ist, dass man mit opacity ein Element teilweise transparent machen kann;
if ($('.target').is(':hidden')) {
$('.target').show();
} else {
$('.target').hide();
}
if ($('.target').is(':visible')) {
$('.target').hide();
} else {
$('.target').show();
}
if ($('.target-visibility').css('visibility') == 'hidden') {
$('.target-visibility').css({
visibility: "visible",
display: ""
});
} else {
$('.target-visibility').css({
visibility: "hidden",
display: ""
});
}
if ($('.target-visibility').css('opacity') == "0") {
$('.target-visibility').css({
opacity: "1",
display: ""
});
} else {
$('.target-visibility').css({
opacity: "0",
display: ""
});
}
Nützliche jQuery Toggle-Methoden:
$('.click').click(function() {
$('.target').toggle();
});
$('.click').click(function() {
$('.target').slideToggle();
});
$('.click').click(function() {
$('.target').fadeToggle();
});
Ein weiterer Unterschied zwischen visibility:hidden
y opacity:0
ist, dass das Element weiterhin auf Ereignisse (wie Klicks) mit opacity:0
. Ich habe diesen Trick beim Erstellen einer benutzerdefinierten Schaltfläche für Datei-Uploads gelernt.
Sie können dies auch mit einfachem JavaScript tun:
function isRendered(domObj) {
if ((domObj.nodeType != 1) || (domObj == document.body)) {
return true;
}
if (domObj.currentStyle && domObj.currentStyle["display"] != "none" && domObj.currentStyle["visibility"] != "hidden") {
return isRendered(domObj.parentNode);
} else if (window.getComputedStyle) {
var cs = document.defaultView.getComputedStyle(domObj, null);
if (cs.getPropertyValue("display") != "none" && cs.getPropertyValue("visibility") != "hidden") {
return isRendered(domObj.parentNode);
}
}
return false;
}
Anmerkungen:
Funktioniert überall
Funktioniert bei verschachtelten Elementen
Funktioniert für CSS und Inline-Stile
Benötigt keinen Rahmen
Funktioniert etwas anders als die von jQuery; sie berücksichtigt visibility: hidden
zu sein sichtbar .
Es ist einfach genug, den obigen Code zu ändern, um das (wohl dumme) jQuery-Verhalten zu imitieren. . . . . function isRendered(o){if((o.nodeType!=1)||(o==document.body)){return true;}if(o.currentStyle&&o.currentStyle["display"]!="none"){return isRendered(o. parentNode);}else if(window.getComputedStyle){if(document.defaultView.getComputedStyle(o, null).getPropertyValue("display")!="none"){return isRendered(o.parentNode);}}return false;}
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/