¿Es posible alternar la visibilidad de un elemento, usando las funciones .hide()
, .show()
o .toggle()
?
¿Cómo probarías si un elemento es visible
o hidden
?
javascript
jquery
dom
visibility
Philip Morton
fuente
fuente
$(element).is(":visible")
funciona para jQuery 1.4.4, pero no para jQuery 1.3.2, en Internet & nbsp; Explorer & nbsp; 8 . Esto se puede probar con el útil fragmento de prueba de Tsvetomir Tsonev . Solo recuerde cambiar la versión de jQuery, para probar debajo de cada una.Respuestas:
Como la pregunta se refiere a un solo elemento, este código podría ser más adecuado:
Es lo mismo que la sugerencia de twernt , pero se aplica a un solo elemento; y coincide con el algoritmo recomendado en las preguntas frecuentes de jQuery .
Usamos jQuery's is () para verificar el elemento seleccionado con otro elemento, selector o cualquier objeto jQuery. Este método recorre los elementos DOM para encontrar una coincidencia que satisfaga el parámetro pasado. Volverá verdadero si hay una coincidencia, de lo contrario devolverá falso.
fuente
visible=false
ydisplay:none
; Considerando que la solución de Mote claramente distorsiona la intención del codificador de verificar eldisplay:none
; (a través de la mención de ocultar y mostrar qué controldisplay:none
novisible=true
):visible
también verificará si los elementos principales son visibles, como señaló chiborg.display
propiedad. Dado que la pregunta original es parashow()
yhide()
, y establecendisplay
, mi respuesta es correcta. Por cierto, funciona con IE7, aquí hay un fragmento de prueba: jsfiddle.net/MWZss ;Puedes usar el
hidden
selector:Y el
visible
selector:fuente
type="hidden"
es solo un caso que puede desencadenarse: oculto. Los elementos sin altura y anchura, los elementos condisplay: none
y los elementos con ancestros ocultos también se clasificarán como: ocultos.El método anterior no considera la visibilidad del padre. Para considerar también a los padres, debe usar
.is(":hidden")
o.is(":visible")
.Por ejemplo,
fuente
hide()
,show()
ytoggle()
funciones, sin embargo, como la mayoría ya han dicho, debemos utilizar los:visible
y:hidden
pseudo-clases.Ninguna de estas respuestas responde a lo que entiendo que es la pregunta, que es lo que estaba buscando, "¿Cómo manejo los elementos que tienen
visibility: hidden
?" . Ni:visible
tampoco:hidden
va a manejar esto, ya que ambos se buscan para su visualización por la documentación. Por lo que pude determinar, no hay un selector para manejar la visibilidad CSS. Así es como lo resolví (selectores jQuery estándar, puede haber una sintaxis más condensada):fuente
visibility
literalmente, pero la pregunta eraHow you would test if an element has been hidden or shown using jQuery?
. Usar jQuery significa: ladisplay
propiedad.visibility: hidden
oopacity: 0
se consideran visibles, ya que aún consumen espacio en el diseño. Vea la respuesta de Pedro Rainho y la documentación de jQuery en el:visible
selector.De ¿Cómo se determina el estado de un elemento toggled?
Puede determinar si un elemento está contraído o no utilizando los selectores
:visible
y:hidden
.Si simplemente está actuando sobre un elemento en función de su visibilidad, puede incluir
:visible
o:hidden
en la expresión del selector. Por ejemplo:fuente
top:-1000px
... Supongo que es un casoA menudo, cuando se verifica si algo es visible o no, usted va a seguir inmediatamente y hacer algo más con él. El encadenamiento de jQuery lo hace fácil.
Por lo tanto, si tiene un selector y desea realizar alguna acción sobre él solo si está visible u oculto, puede usarlo
filter(":visible")
ofilter(":hidden")
seguirlo encadenándolo con la acción que desea realizar.Entonces, en lugar de una
if
declaración, así:O más eficiente, pero aún más feo:
Puedes hacerlo todo en una línea:
fuente
El
:visible
selector de acuerdo con la documentación de jQuery :Esto es útil en algunos casos e inútil en otros, porque si desea verificar si el elemento es visible (
display != none
), ignorando la visibilidad de los padres, encontrará que hacerlo.css("display") == 'none'
no solo es más rápido, sino que también devolverá la verificación de visibilidad correctamente.Si desea comprobar la visibilidad en lugar de la pantalla, se debe utilizar:
.css("visibility") == "hidden"
.También tenga en cuenta las notas adicionales de jQuery :
Además, si le preocupa el rendimiento, debe verificar Ahora me ve ... mostrar / ocultar el rendimiento (2010-05-04). Y use otros métodos para mostrar y ocultar elementos.
fuente
Esto funciona para mí, y estoy usando
show()
yhide()
para hacer que mi div esté oculto / visible:fuente
Cómo funciona la visibilidad del elemento y jQuery ;
Un elemento podría estar oculto con
display:none
,visibility:hidden
oopacity:0
. La diferencia entre esos métodos:display:none
oculta el elemento y no ocupa espacio;visibility:hidden
oculta el elemento, pero aún ocupa espacio en el diseño;opacity:0
oculta el elemento como "visibilidad: oculto", y todavía ocupa espacio en el diseño; la única diferencia es que la opacidad le permite a uno hacer que un elemento sea parcialmente transparente;Métodos útiles de alternar jQuery:
fuente
visibility:hidden
yopacity:0
es que el elemento seguirá respondiendo a eventos (como clics) conopacity:0
. Aprendí ese truco al hacer un botón personalizado para cargar archivos.También puede hacer esto usando JavaScript simple:
Notas:
Funciona en todas partes
Funciona para elementos anidados.
Funciona para CSS y estilos en línea.
No requiere un marco
fuente
visibility: hidden
para ser visibles .Yo usaría la clase CSS
.hide { display: none!important; }
.Para ocultar / mostrar, llamo
.addClass("hide")/.removeClass("hide")
. Para verificar la visibilidad, yo uso.hasClass("hide")
.Es una forma simple y clara de verificar / ocultar / mostrar elementos, si no planea usar
.toggle()
o.animate()
métodos.fuente
.hasClass('hide')
no comprueba si un antepasado del padre está oculto (lo que también lo haría oculto). Es posible que esto funcione correctamente comprobando si.closest('.hide').length > 0
, pero ¿por qué reinventar la rueda?Enlace de demostración
Fuente:
Blogger Plug n Play - Herramientas y widgets jQuery: cómo ver si Element está oculto o es visible usando jQuery
fuente
Simplemente se puede usar el atributo
hidden
ovisible
, como:O se puede simplificar con el mismo es de la siguiente manera.
fuente
ebdiv
debe ajustarse astyle="display:none;"
. Funciona tanto para mostrar como para ocultar:fuente
Otra respuesta que debe tener en cuenta es que si está ocultando un elemento, debe usar jQuery , pero en lugar de ocultarlo, elimina todo el elemento, pero copia su contenido HTML y la etiqueta en una variable jQuery, y luego todo lo que necesita hacer es probar si existe tal etiqueta en la pantalla, utilizando la normal
if (!$('#thetagname').length)
.fuente
Al probar un elemento contra el
:hidden
selector en jQuery, se debe considerar que un elemento en posición absoluta puede reconocerse como oculto aunque sus elementos secundarios sean visibles .Esto parece algo contrario a la intuición en primer lugar, aunque echar un vistazo más de cerca a la documentación de jQuery proporciona la información relevante:
Entonces, esto realmente tiene sentido en lo que respecta al modelo de caja y el estilo calculado para el elemento. Incluso si ancho y alto no se establecen explícitamente en 0, pueden establecerse implícitamente .
Eche un vistazo al siguiente ejemplo:
Actualización para jQuery 3.x:
¡Con jQuery 3 el comportamiento descrito cambiará! Los elementos se considerarán visibles si tienen cuadros de diseño, incluidos los de ancho y / o alto cero.
JSFiddle con jQuery 3.0.0-alpha1:
http://jsfiddle.net/pM2q3/7/
El mismo código JavaScript tendrá esta salida:
fuente
Esto puede funcionar:
fuente
Ejemplo:
fuente
Para verificar si no está visible, uso
!
:O el siguiente también es el sam, guardando el selector jQuery en una variable para tener un mejor rendimiento cuando lo necesite varias veces:
fuente
Use alternar clases, no editar estilos. . .
Usar clases designadas para elementos "escondidos" es fácil y también uno de los métodos más eficientes. Alternar una clase 'oculta' con un
Display
estilo 'ninguno' funcionará más rápido que editar ese estilo directamente. Expliqué algo de esto bastante a fondo en la pregunta de desbordamiento de pila. Cómo convertir dos elementos visibles / ocultos en el mismo div .Mejores prácticas y optimización de JavaScript
Aquí hay un video verdaderamente esclarecedor de Google Tech Talk del ingeniero front-end de Google Nicholas Zakas:
fuente
Ejemplo de uso de la verificación visible para adblocker está activado:
"ablockercheck" es un ID que bloquea el bloqueador de anuncios. Entonces, verificando si está visible, puede detectar si el bloqueador de anuncios está activado.
fuente
Después de todo, ninguno de los ejemplos me conviene, así que escribí el mío.
Pruebas (sin soporte de Internet Explorer
filter:alpha
):a) Verifique si el documento no está oculto
b) Verifique si un elemento tiene cero ancho / alto / opacidad o
display:none
/visibility:hidden
en estilos en líneac) Verifique si el centro (también porque es más rápido que probar cada píxel / esquina) del elemento no está oculto por otro elemento (y todos sus antepasados, por ejemplo:
overflow:hidden
/ scroll / un elemento sobre otro) o los bordes de la pantallad) Compruebe si un elemento tiene cero ancho / alto / opacidad o
display:none
/ visibilidad: oculto en estilos calculados (entre todos los antepasados)Probado en
Android 4.4 (navegador nativo / Chrome / Firefox), Firefox (Windows / Mac), Chrome (Windows / Mac), Opera (Windows Presto / Mac WebKit), Internet Explorer (modos de documento de Internet Explorer 5-11 + Internet Explorer 8 en un máquina virtual) y Safari (Windows / Mac / iOS).
Cómo utilizar:
fuente
Debe verificar ambos ... Pantalla y visibilidad:
Si buscamos
$(this).is(":visible")
, jQuery verifica ambas cosas automáticamente.fuente
Tal vez puedas hacer algo como esto
fuente
Simplemente verifique la visibilidad buscando un valor booleano, como:
Usé este código para cada función. De lo contrario, puede usar
is(':visible')
para verificar la visibilidad de un elemento.fuente
Porque
Elements with visibility: hidden or opacity: 0 are considered visible, since they still consume space in the layout
(como se describe para jQuery: Selector visible ), podemos verificar si el elemento es realmente visible de esta manera:fuente
Pero, ¿qué pasa si el CSS del elemento es el siguiente?
Entonces, esta respuesta a la pregunta de desbordamiento de pila también debe considerarse si se debe verificar si un elemento está fuera de la pantalla .
fuente
Se puede crear una función para verificar los atributos de visibilidad / visualización para medir si el elemento se muestra en la interfaz de usuario o no.
Violín de trabajo
fuente
También aquí hay una expresión condicional ternaria para verificar el estado del elemento y luego alternarlo:
fuente
$('elementToToggle').toggle('slow');
...:)
fuente