Czy to możliwe, aby przełączyć widoczność elementu, używając funkcji .hide()
, .show()
lub .toggle()
?
Jak sprawdziłbyś, czy elementem jest visible
lub hidden
?
javascript
jquery
dom
visibility
Philip Morton
źródło
źródło
$(element).is(":visible")
działa dla jQuery 1.4.4, ale nie dla jQuery 1.3.2, w Internet & nbsp; Explorer & nbsp; 8 . Można to przetestować za pomocą pomocnego fragmentu testowego Tsvetomira Tsoneva . Pamiętaj tylko, aby zmienić wersję jQuery, aby przetestować pod każdym z nich.Odpowiedzi:
Ponieważ pytanie dotyczy pojedynczego elementu, ten kod może być bardziej odpowiedni:
Jest to to samo, co sugestia twernta , ale dotyczy tylko jednego elementu; i odpowiada algorytmowi zalecanemu w FAQ jQuery .
Używamy jQuery's is (), aby sprawdzić wybrany element za pomocą innego elementu, selektora lub dowolnego obiektu jQuery. Ta metoda przechodzi wzdłuż elementów DOM, aby znaleźć dopasowanie, które spełnia przekazany parametr. Zwróci true, jeśli istnieje dopasowanie, w przeciwnym razie zwróci false.
źródło
visible=false
idisplay:none
; mając na uwadze, że rozwiązanie Mote wyraźnie zniechęca programistów zamierzających sprawdzićdisplay:none
; (poprzez wzmiankę o ukryciu i pokazaniu, których kontrolidisplay:none
nie mavisible=true
):visible
sprawdzi również, czy elementy nadrzędne są widoczne, jak zauważył Chiborg.display
właściwość. Biorąc pod uwagę, że pierwotne pytanie dotyczyshow()
ihide()
, i ustalilidisplay
, moja odpowiedź jest poprawna. Przy okazji działa z IE7, oto fragment testowy - jsfiddle.net/MWZss ;Możesz użyć
hidden
selektora:I
visible
selektor:źródło
type="hidden"
to tylko jeden przypadek, który może wywołać: ukryty. Elementy bez wysokości i szerokości, elementy zidisplay: none
elementy z ukrytymi przodkami również będą się kwalifikować jako: ukryte.Powyższa metoda nie uwzględnia widoczności elementu nadrzędnego. Aby wziąć pod uwagę również rodzica, należy użyć
.is(":hidden")
lub.is(":visible")
.Na przykład,
źródło
hide()
,show()
itoggle()
funkcje, jednak, jak większość z nich już zostało powiedziane, powinniśmy używać:visible
i:hidden
pseudo-klas.Żadna z tych odpowiedzi nie dotyczy pytania, które rozumiem jako tego, czego szukałem: „Jak radzić sobie z przedmiotami, które mają
visibility: hidden
?” . Ani to,:visible
ani:hidden
nie poradzi sobie z tym, ponieważ oboje szukają wyświetlania według dokumentacji. O ile mogłem ustalić, nie ma selektora do obsługi widoczności CSS. Oto jak to rozwiązałem (standardowe selektory jQuery, może być bardziej skondensowana składnia):źródło
visibility
dosłowne odpowiedzi, ale pytanie brzmiałoHow you would test if an element has been hidden or shown using jQuery?
. Korzystanie z jQuery oznacza:display
właściwość.visibility: hidden
lubopacity: 0
są uważane za widoczne, ponieważ nadal zajmują miejsce w układzie. Zobacz odpowiedź Pedro Rainho i dokumentację jQuery dotyczącą:visible
selektora.Od Jak ustalić stan przełączanego elementu?
Możesz określić, czy element jest zwinięty, czy nie, używając selektorów
:visible
i:hidden
.Jeśli po prostu działasz na elemencie w oparciu o jego widoczność, możesz po prostu uwzględnić
:visible
lub:hidden
w wyrażeniu selektora. Na przykład:źródło
top:-1000px
... Zgadnij, że to przypadekCzęsto sprawdzając, czy coś jest widoczne, czy nie, natychmiast pójdziesz do przodu i zrobisz z tym coś innego. Łańcuch jQuery ułatwia to.
Więc jeśli masz selektor i chcesz wykonać na nim jakąś akcję, tylko jeśli jest widoczny lub ukryty, możesz użyć
filter(":visible")
lubfilter(":hidden")
po nim połączyć go łańcuchem z akcją, którą chcesz podjąć.Zamiast
if
oświadczenia, tak:Lub bardziej wydajny, ale jeszcze brzydszy:
Możesz to wszystko zrobić w jednym wierszu:
źródło
:visible
Selektor według dokumentacji jQuery :Jest to przydatne w niektórych przypadkach i bezużyteczne w innych, ponieważ jeśli chcesz sprawdzić, czy element jest widoczny (
display != none
), ignorując widoczność rodziców, przekonasz się, że działanie.css("display") == 'none'
jest nie tylko szybsze, ale również poprawnie zwróci kontrolę widoczności.Jeśli chcesz sprawdzić widoczność zamiast wyświetlacza, należy użyć:
.css("visibility") == "hidden"
.Weź również pod uwagę dodatkowe uwagi jQuery :
Ponadto, jeśli martwisz się wydajnością, powinieneś sprawdzić Teraz widzisz mnie… pokaż / ukryj wydajność (2010-05-04). I użyj innych metod do pokazywania i ukrywania elementów.
źródło
Działa to dla mnie, a ja używam
show()
ihide()
aby ukryć / widoczność mojego diva:źródło
Jak działa widoczność elementu i jQuery ;
Element może być ukryte z
display:none
,visibility:hidden
lubopacity:0
. Różnica między tymi metodami:display:none
ukrywa element i nie zajmuje miejsca;visibility:hidden
ukrywa element, ale nadal zajmuje miejsce w układzie;opacity:0
ukrywa element jako „widoczność: ukryty” i nadal zajmuje miejsce w układzie; jedyną różnicą jest to, że nieprzezroczystość pozwala uczynić element częściowo przezroczystym;Przydatne metody przełączania jQuery:
źródło
visibility:hidden
iopacity:0
polega na tym, że element nadal reaguje na zdarzenia (np. Kliknięcia) za pomocąopacity:0
. Nauczyłem się tej sztuczki, tworząc niestandardowy przycisk do przesyłania plików.Możesz to również zrobić za pomocą zwykłego JavaScript:
Uwagi:
Działa wszędzie
Działa dla elementów zagnieżdżonych
Działa dla CSS i stylów wbudowanych
Nie wymaga ram
źródło
visibility: hidden
za widoczne .Użyłbym klasy CSS
.hide { display: none!important; }
.Dzwonię do ukrywania / pokazywania
.addClass("hide")/.removeClass("hide")
. Używam do sprawdzania widoczności.hasClass("hide")
.Jest to prosty i jasny sposób sprawdzania / ukrywania / pokazywania elementów, jeśli nie planujesz używać
.toggle()
ani.animate()
metod.źródło
.hasClass('hide')
nie sprawdza, czy przodek rodzica jest ukryty (co też by go ukryło). Możliwe, że to sprawdzi się poprawnie, sprawdzając, czy.closest('.hide').length > 0
, ale po co wymyślać koło ponownie?Link demonstracyjny
Źródło:
Blogger Plug n Play - Narzędzia i widżety jQuery: jak sprawdzić, czy element jest ukryty lub widoczny za pomocą jQuery
źródło
Można po prostu użyć atrybutu
hidden
lubvisible
, na przykład:Czy można uprościć samo z Is następująco.
źródło
ebdiv
powinien być ustawiony nastyle="display:none;"
. Działa zarówno w przypadku pokazu, jak i ukrywania:źródło
Inną odpowiedzią, którą należy wziąć pod uwagę, jest to, że jeśli ukrywasz element, powinieneś użyć jQuery , ale zamiast go ukrywać, usuwasz cały element, ale kopiujesz jego zawartość HTML i sam tag do zmiennej jQuery, a następnie wszystko, co musisz zrobić, to sprawdzić, czy na ekranie jest taki tag, używając normalnego
if (!$('#thetagname').length)
.źródło
Podczas testowania elementu względem
:hidden
selektora w jQuery należy wziąć pod uwagę, że element pozycjonowany absolutnie może zostać rozpoznany jako ukryty, chociaż jego elementy potomne są widoczne .Wydaje się to przede wszystkim nieco sprzeczne z intuicją - choć dokładne przyjrzenie się dokumentacji jQuery daje istotne informacje:
Ma to więc sens w odniesieniu do modelu pudełkowego i obliczonego stylu elementu. Nawet jeśli szerokość i wysokość nie są jawnie ustawione na 0, mogą być ustawione domyślnie .
Spójrz na następujący przykład:
Aktualizacja dla jQuery 3.x:
W jQuery 3 opisane zachowanie się zmieni! Elementy będą uważane za widoczne, jeśli mają jakieś pola układu, w tym te o zerowej szerokości i / lub wysokości.
JSFiddle z jQuery 3.0.0-alpha1:
http://jsfiddle.net/pM2q3/7/
Ten sam kod JavaScript będzie miał następujące dane wyjściowe:
źródło
Może to działać:
źródło
Przykład:
źródło
Aby sprawdzić, czy nie jest widoczny, używam
!
:Lub poniżej znajduje się również sam, zapisując selektor jQuery w zmiennej, aby uzyskać lepszą wydajność, gdy jest potrzebna wiele razy:
źródło
Używaj przełączania klas, a nie edycji stylu. . .
Korzystanie z klas przeznaczonych do „ukrywania” elementów jest łatwe, a także jedną z najbardziej wydajnych metod. Przełączanie klasy „ukrytej” ze
Display
stylem „none” będzie działać szybciej niż bezpośrednia edycja tego stylu. Wyjaśniłem niektóre z tego dość dokładnie w pytaniu Przepełnienie stosu Przekształcanie dwóch elementów widocznych / ukrytych w tym samym div .JavaScript Najlepsze praktyki i optymalizacja
Oto naprawdę pouczające wideo z Google Tech Talk przez inżyniera Google, Nicholasa Zakasa:
źródło
Przykład użycia widocznego czeku dla adblockera jest aktywowany:
„ablockercheck” to identyfikator, który blokuje adblocker. Więc sprawdzając, czy jest widoczny, możesz wykryć, czy adblocker jest włączony.
źródło
W końcu żaden z tych przykładów mi nie pasuje, więc napisałem własny.
Testy (brak obsługi Internet Explorera)
filter:alpha
):a) Sprawdź, czy dokument nie jest ukryty
b) Sprawdź, czy element ma zerową szerokość / wysokość / krycie lub
display:none
/visibility:hidden
w stylach wbudowanychc) Sprawdź, czy środek (także dlatego, że jest szybszy niż testowanie każdego piksela / rogu) elementu nie jest ukryty przez inny element (i wszystkich przodków, na przykład:
overflow:hidden
/ scroll / jeden element nad innym) lub krawędzie ekranud) Sprawdź, czy element ma zerową szerokość / wysokość / krycie lub
display:none
/ widoczność: ukryty w stylach obliczeniowych (wśród wszystkich przodków)Testowane na
Android 4.4 (natywna przeglądarka / Chrome / Firefox), Firefox (Windows / Mac), Chrome (Windows / Mac), Opera (Windows Presto / Mac WebKit), Internet Explorer (tryby dokumentów 5-11 Internet Explorer + Internet Explorer 8 na maszyna wirtualna) i Safari (Windows / Mac / iOS).
Jak używać:
źródło
Musisz sprawdzić zarówno ... Wyświetlanie, jak i widoczność:
Jeśli sprawdzimy
$(this).is(":visible")
, jQuery automatycznie sprawdza obie rzeczy.źródło
Może możesz zrobić coś takiego
źródło
Wystarczy sprawdzić widoczność, sprawdzając wartość logiczną, np .:
Użyłem tego kodu dla każdej funkcji. W przeciwnym razie możesz użyć
is(':visible')
do sprawdzenia widoczności elementu.źródło
Ponieważ
Elements with visibility: hidden or opacity: 0 are considered visible, since they still consume space in the layout
(jak opisano w jQuery: visible Selector ) - możemy sprawdzić, czy element jest naprawdę widoczny w ten sposób:źródło
Ale co, jeśli CSS elementu wygląda następująco?
Tak więc należy również wziąć pod uwagę tę odpowiedź na pytanie dotyczące przepełnienia stosu. Jak sprawdzić, czy element jest poza ekranem .
źródło
Można utworzyć funkcję w celu sprawdzenia widoczności / atrybutów wyświetlania w celu oceny, czy element jest wyświetlany w interfejsie użytkownika, czy nie.
Working Fiddle
źródło
Oto także trójkowe wyrażenie warunkowe, które sprawdza stan elementu, a następnie przełącza go:
źródło
$('elementToToggle').toggle('slow');
...:)
źródło