Est-il possible de basculer la visibilité d'un élément, en utilisant les fonctions .hide()
, .show()
ou .toggle()
?
Comment testeriez-vous si un élément est visible
ou hidden
?
javascript
jquery
dom
visibility
Philip Morton
la source
la source
$(element).is(":visible")
fonctionne pour jQuery 1.4.4, mais pas pour jQuery 1.3.2, sous Internet & nbsp; Explorer & nbsp; 8 . Cela peut être testé à l'aide de l'extrait de test utile de Tsvetomir Tsonev . N'oubliez pas de changer la version de jQuery, pour tester sous chacun.Réponses:
Étant donné que la question fait référence à un seul élément, ce code pourrait être plus approprié:
C'est la même chose que la suggestion de twernt , mais appliquée à un seul élément; et il correspond à l'algorithme recommandé dans la FAQ jQuery .
Nous utilisons is () de jQuery pour vérifier l'élément sélectionné avec un autre élément, sélecteur ou tout autre objet jQuery. Cette méthode parcourt les éléments DOM pour trouver une correspondance qui satisfait le paramètre passé. Il retournera vrai s'il y a une correspondance, sinon retournera faux.
la source
visible=false
etdisplay:none
; considérant que la solution de Mote illustre clairement les codeurs qui ont l'intention de vérifier ledisplay:none
; (via mention de cache-cache quidisplay:none
ne contrôle pasvisible=true
):visible
vérifiera également si les éléments parents sont visibles, comme l'a souligné chiborg.display
propriété. Étant donné que la question d'origine est pourshow()
ethide()
, et ils ont réglédisplay
, ma réponse est correcte. Au fait, cela fonctionne avec IE7, voici un extrait de test - jsfiddle.net/MWZss ;Vous pouvez utiliser le
hidden
sélecteur:Et le
visible
sélecteur:la source
type="hidden"
sont qu'un seul cas qui peut déclencher: caché. Les éléments sans hauteur ni largeur, les éléments avecdisplay: none
et les éléments avec ancêtres cachés seront également qualifiés de: cachés.La méthode ci-dessus ne prend pas en compte la visibilité du parent. Pour considérer également le parent, vous devez utiliser
.is(":hidden")
ou.is(":visible")
.Par exemple,
la source
hide()
,show()
et lestoggle()
fonctions, cependant, comme la plupart ont déjà dit, nous devrions utiliser les:visible
et:hidden
pseudo-classes.Aucune de ces réponses ne répond à ce que je comprends être la question, c'est-à-dire ce que je cherchais: "Comment gérer les éléments qui en ont
visibility: hidden
?" . Ni:visible
ne:hidden
traitera cela, car ils sont tous deux à la recherche d'affichage par la documentation. Pour autant que je puisse déterminer, il n'y a pas de sélecteur pour gérer la visibilité CSS. Voici comment je l'ai résolu (sélecteurs jQuery standard, il peut y avoir une syntaxe plus condensée):la source
visibility
littéralement, mais la question étaitHow you would test if an element has been hidden or shown using jQuery?
. Utiliser jQuery signifie: ladisplay
propriété.visibility: hidden
ouopacity: 0
sont considérés comme visibles, car ils consomment toujours de l'espace dans la mise en page. Voir la réponse de Pedro Rainho et la documentation jQuery sur le:visible
sélecteur.De Comment puis-je déterminer l'état d'un élément basculé?
Vous pouvez déterminer si un élément est réduit ou non à l'aide des sélecteurs
:visible
et:hidden
.Si vous agissez simplement sur un élément en fonction de sa visibilité, vous pouvez simplement inclure
:visible
ou:hidden
dans l'expression de sélecteur. Par exemple:la source
top:-1000px
...Souvent, lorsque vous vérifiez si quelque chose est visible ou non, vous allez immédiatement de l'avant et faites autre chose avec. Le chaînage jQuery rend cela facile.
Donc, si vous avez un sélecteur et que vous souhaitez effectuer une action sur celui-ci uniquement s'il est visible ou masqué, vous pouvez l'utiliser
filter(":visible")
ou lefilter(":hidden")
suivre en le chaînant avec l'action que vous souhaitez effectuer.Donc, au lieu d'une
if
déclaration, comme ceci:Ou plus efficace, mais encore plus laid:
Vous pouvez tout faire en une seule ligne:
la source
Le
:visible
sélecteur selon la documentation jQuery :Ceci est utile dans certains cas et inutile dans d'autres, car si vous voulez vérifier si l'élément est visible (
display != none
), en ignorant la visibilité des parents, vous constaterez que faire.css("display") == 'none'
est non seulement plus rapide, mais retournera également correctement le contrôle de visibilité.Si vous voulez vérifier la visibilité au lieu de l' affichage, vous devez utiliser:
.css("visibility") == "hidden"
.Tenez également compte des notes jQuery supplémentaires :
De plus, si vous êtes préoccupé par les performances, vous devriez cocher Maintenant vous me voyez… afficher / masquer les performances (2010-05-04). Et utilisez d'autres méthodes pour afficher et masquer les éléments.
la source
Cela fonctionne pour moi, et j'utilise
show()
ethide()
pour rendre ma div cachée / visible:la source
Comment fonctionne la visibilité des éléments et jQuery ;
Un élément pourrait être caché avec
display:none
,visibility:hidden
ouopacity:0
. La différence entre ces méthodes:display:none
cache l'élément, et il ne prend pas de place;visibility:hidden
masque l'élément, mais il prend toujours de la place dans la mise en page;opacity:0
cache l'élément comme "visibilité: caché", et il prend toujours de la place dans la mise en page; la seule différence est que l'opacité permet de rendre un élément partiellement transparent;Méthodes de basculement jQuery utiles:
la source
visibility:hidden
etopacity:0
est que l'élément répondra toujours aux événements (comme les clics) avecopacity:0
. J'ai appris cette astuce en créant un bouton personnalisé pour les téléchargements de fichiers.Vous pouvez également le faire en utilisant du JavaScript simple:
Remarques:
Fonctionne partout
Fonctionne pour les éléments imbriqués
Fonctionne pour les styles CSS et en ligne
Ne nécessite pas de cadre
la source
visibility: hidden
être visible .J'utiliserais la classe CSS
.hide { display: none!important; }
.Pour cacher / montrer, j'appelle
.addClass("hide")/.removeClass("hide")
. Pour vérifier la visibilité, j'utilise.hasClass("hide")
.C'est un moyen simple et clair de vérifier / masquer / afficher les éléments, si vous ne prévoyez pas d'utiliser
.toggle()
ou de.animate()
méthodes.la source
.hasClass('hide')
ne vérifie pas si un ancêtre du parent est masqué (ce qui le rendrait également masqué). Vous pourriez éventuellement faire fonctionner cela correctement en vérifiant si.closest('.hide').length > 0
, mais pourquoi réinventer la roue?Lien de démonstration
La source:
Blogger Plug n Play - Outils et widgets jQuery: comment voir si l'élément est masqué ou visible à l'aide de jQuery
la source
On peut simplement utiliser l' attribut
hidden
orvisible
, comme:Ou vous pouvez simplifier la même chose avec est -ce qui suit.
la source
ebdiv
doit être défini surstyle="display:none;"
. Cela fonctionne à la fois pour afficher et masquer:la source
Une autre réponse que vous devriez prendre en considération est que si vous cachez un élément, vous devez utiliser jQuery , mais au lieu de le cacher, vous supprimez l'élément entier, mais vous copiez son contenu HTML et la balise elle-même dans une variable jQuery, puis tout ce que vous devez faire est de tester s'il y a une telle balise à l'écran, en utilisant la normale
if (!$('#thetagname').length)
.la source
Lors du test d'un élément par rapport à
:hidden
selector dans jQuery, il convient de considérer qu'un élément positionné absolu peut être reconnu comme masqué bien que leurs éléments enfants soient visibles .Cela semble quelque peu contre-intuitif en premier lieu - bien que regarder de plus près la documentation jQuery donne les informations pertinentes:
Donc, cela a du sens en ce qui concerne le modèle de boîte et le style calculé pour l'élément. Même si la largeur et la hauteur ne sont pas définies explicitement sur 0, elles peuvent être définies implicitement .
Jetez un œil à l'exemple suivant:
Mise à jour pour jQuery 3.x:
Avec jQuery 3, le comportement décrit va changer! Les éléments seront considérés comme visibles s'ils ont des boîtes de mise en page, y compris celles de largeur et / ou de hauteur zéro.
JSFiddle avec jQuery 3.0.0-alpha1:
http://jsfiddle.net/pM2q3/7/
Le même code JavaScript aura alors cette sortie:
la source
Cela peut fonctionner:
la source
Exemple:
la source
Pour vérifier s'il n'est pas visible j'utilise
!
:Ou ce qui suit est également le sam, enregistrant le sélecteur jQuery dans une variable pour avoir de meilleures performances lorsque vous en avez besoin plusieurs fois:
la source
Utilisez le basculement de classe, pas l'édition de style. . .
L'utilisation de classes désignées pour «masquer» des éléments est facile et également l'une des méthodes les plus efficaces. Basculer une classe «cachée» avec un
Display
style «aucun» sera plus rapide que de modifier directement ce style. J'ai expliqué une partie de cela assez en détail dans la question Stack Overflow Transformer deux éléments visibles / cachés dans la même div .Meilleures pratiques et optimisation JavaScript
Voici une vidéo vraiment enrichissante d'un discours Google Tech Talk par l'ingénieur front-end de Google Nicholas Zakas:
la source
Exemple d'utilisation de la vérification visible pour adblocker activé:
"ablockercheck" est un identifiant qui bloque adblocker. Donc, en vérifiant s'il est visible, vous pouvez détecter si adblocker est activé.
la source
Après tout, aucun exemple ne me convient, j'ai donc écrit le mien.
Tests (pas de support d'Internet Explorer
filter:alpha
):a) Vérifiez si le document n'est pas masqué
b) Vérifiez si un élément n'a pas de largeur / hauteur / opacité ou
display:none
/visibility:hidden
dans des styles en lignec) Vérifiez si le centre (également parce qu'il est plus rapide que de tester chaque pixel / coin) de l'élément n'est pas masqué par un autre élément (et par tous les ancêtres, par exemple:
overflow:hidden
/ scroll / un élément sur un autre) ou les bords de l'écrand) Vérifier si un élément a une largeur / hauteur / opacité ou
display:none
/ visibilité nulle : caché dans les styles calculés (parmi tous les ancêtres)Testé sur
Android 4.4 (navigateur natif / Chrome / Firefox), Firefox (Windows / Mac), Chrome (Windows / Mac), Opera (Windows Presto / Mac WebKit), Internet Explorer (modes de document Internet Explorer 5-11 + Internet Explorer 8 sur un machine virtuelle) et Safari (Windows / Mac / iOS).
Comment utiliser:
la source
Vous devez vérifier les deux ... Affichage et visibilité:
Si nous vérifions
$(this).is(":visible")
, jQuery vérifie automatiquement les deux choses.la source
Vous pouvez peut-être faire quelque chose comme ça
la source
Vérifiez simplement la visibilité en recherchant une valeur booléenne, comme:
J'ai utilisé ce code pour chaque fonction. Sinon, vous pouvez utiliser
is(':visible')
pour vérifier la visibilité d'un élément.la source
Parce que
Elements with visibility: hidden or opacity: 0 are considered visible, since they still consume space in the layout
(comme décrit pour jQuery: sélecteur visible ) - nous pouvons vérifier si l'élément est vraiment visible de cette façon:la source
Mais que se passe-t-il si le CSS de l'élément est le suivant?
Donc, cette réponse à la question Stack Overflow Comment vérifier si un élément est hors écran doit également être considérée.
la source
Une fonction peut être créée afin de vérifier les attributs de visibilité / affichage afin de mesurer si l'élément est affiché dans l'interface utilisateur ou non.
Violon de travail
la source
Voici également une expression conditionnelle ternaire pour vérifier l'état de l'élément, puis pour le basculer:
la source
$('elementToToggle').toggle('slow');
...:)
la source