É possível alternar a visibilidade de um elemento, usando as funções .hide()
, .show()
ou .toggle()
?
Como você testaria se um elemento é visible
ou hidden
?
javascript
jquery
dom
visibility
Philip Morton
fonte
fonte
$(element).is(":visible")
funciona para o jQuery 1.4.4, mas não para o jQuery 1.3.2, no Internet & nbsp; Explorer & nbsp; 8 . Isso pode ser testado usando o útil trecho de teste de Tsvetomir Tsonev . Lembre-se de alterar a versão do jQuery, para testar em cada um.Respostas:
Como a pergunta se refere a um único elemento, esse código pode ser mais adequado:
É o mesmo que a sugestão de twernt , mas aplicada a um único elemento; e corresponde ao algoritmo recomendado nas perguntas frequentes do jQuery .
Usamos o jQuery's is () para verificar o elemento selecionado com outro elemento, seletor ou qualquer objeto jQuery. Este método percorre os elementos DOM para encontrar uma correspondência que satisfaça o parâmetro passado. Ele retornará verdadeiro se houver uma correspondência, caso contrário, retornará falso.
fonte
visible=false
edisplay:none
; considerando que a solução da Mote claramente ilita os codificadores que pretendem verificar adisplay:none
; (via menção de esconder e mostrar que o controledisplay:none
nãovisible=true
):visible
também verificará se os elementos pai estão visíveis, como chiborg apontou.display
propriedade. Dado que a pergunta original é parashow()
ehide()
, e eles definemdisplay
, minha resposta está correta. Pela maneira como funciona com o IE7, aqui está um trecho de teste - jsfiddle.net/MWZss ;Você pode usar o
hidden
seletor:E o
visible
seletor:fonte
type="hidden"
são apenas um caso que pode ser acionado: oculto. Elementos sem altura e largura, elementos comdisplay: none
e antepassados ocultos também serão qualificados como: ocultos.O método acima não considera a visibilidade do pai. Para considerar os pais também, você deve usar
.is(":hidden")
ou.is(":visible")
.Por exemplo,
fonte
hide()
,show()
etoggle()
funções, no entanto, como a maioria já disse, nós devemos usar os:visible
e:hidden
pseudo-classes.Nenhuma dessas respostas aborda o que eu entendo ser a pergunta, que é o que eu estava procurando: "Como manejo itens que possuem
visibility: hidden
?" . Nem:visible
nem:hidden
vai lidar com isso, como ambos estão olhando para exibição de acordo com a documentação. Tanto quanto pude determinar, não há seletor para lidar com a visibilidade CSS. Aqui está como eu o resolvi (seletores jQuery padrão, pode haver uma sintaxe mais condensada):fonte
visibility
literalmente, mas a pergunta eraHow you would test if an element has been hidden or shown using jQuery?
. Usar jQuery significa: adisplay
propriedadevisibility: hidden
ouopacity: 0
são considerados visíveis, pois ainda consomem espaço no layout. Consulte a resposta de Pedro Rainho e a documentação do jQuery no:visible
seletor.De Como determino o estado de um elemento alternado?
Você pode determinar se um elemento está recolhido ou não, usando os seletores
:visible
e:hidden
.Se você estiver simplesmente atuando em um elemento com base em sua visibilidade, poderá apenas incluir
:visible
ou:hidden
na expressão do seletor. Por exemplo:fonte
top:-1000px
... acho que é um caso bordaFreqüentemente, ao verificar se algo está visível ou não, você irá imediatamente em frente e fará outra coisa com ele. O encadeamento jQuery facilita isso.
Portanto, se você possui um seletor e deseja executar alguma ação nele apenas se estiver visível ou oculto, poderá usar
filter(":visible")
oufilter(":hidden")
segui-lo encadeando-o com a ação que deseja executar.Então, em vez de uma
if
declaração, assim:Ou mais eficiente, mas ainda mais feia:
Você pode fazer tudo em uma linha:
fonte
O
:visible
seletor de acordo com a documentação do jQuery :Isso é útil em alguns casos e inútil em outros, porque se você deseja verificar se o elemento está visível (
display != none
), ignorando a visibilidade dos pais, você verá que.css("display") == 'none'
não é apenas mais rápido, mas também retornará a verificação de visibilidade corretamente.Se você deseja verificar a visibilidade em vez da exibição, use:
.css("visibility") == "hidden"
.Leve também em consideração as notas adicionais do jQuery :
Além disso, se você está preocupado com o desempenho, deve verificar Agora você me vê ... mostrar / ocultar o desempenho (04-05-2010). E use outros métodos para mostrar e ocultar elementos.
fonte
Isso funciona para mim e estou usando
show()
ehide()
para tornar minha div oculta / visível:fonte
Como a visibilidade do elemento e o jQuery funcionam ;
Um elemento pode estar oculto com
display:none
,visibility:hidden
ouopacity:0
. A diferença entre esses métodos:display:none
oculta o elemento e não ocupa espaço;visibility:hidden
oculta o elemento, mas ainda ocupa espaço no layout;opacity:0
oculta o elemento como "visibilidade: oculto" e ainda ocupa espaço no layout; a única diferença é que a opacidade permite tornar um elemento parcialmente transparente;Métodos úteis de alternância do jQuery:
fonte
visibility:hidden
eopacity:0
é que o elemento ainda responderá a eventos (como cliques) comopacity:0
. Eu aprendi esse truque ao criar um botão personalizado para upload de arquivos.Você também pode fazer isso usando JavaScript simples:
Notas:
Funciona em qualquer lugar
Funciona para elementos aninhados
Funciona para CSS e estilos embutidos
Não requer uma estrutura
fonte
visibility: hidden
ser visível .Eu usaria classe CSS
.hide { display: none!important; }
.Por esconder / mostrar, eu ligo
.addClass("hide")/.removeClass("hide")
. Para verificar a visibilidade, eu uso.hasClass("hide")
.É uma maneira simples e clara de verificar / ocultar / mostrar elementos, se você não planeja usar
.toggle()
ou.animate()
métodos.fonte
.hasClass('hide')
não verifica se um ancestral do pai está oculto (o que também o ocultaria). Você poderia fazer isso funcionar corretamente verificando se.closest('.hide').length > 0
, mas por que reinventar a roda?Link de demonstração
Fonte:
Blogger Plug n Play - Ferramentas e Widgets do jQuery: Como ver se o elemento está oculto ou visível usando o jQuery
fonte
Pode-se simplesmente usar o atributo
hidden
ouvisible
, como:Ou você pode simplificar o mesmo com é como segue.
fonte
ebdiv
deve estar definido comostyle="display:none;"
. Funciona para mostrar e ocultar:fonte
Outra resposta que você deve levar em consideração é que, se você está ocultando um elemento, deve usar o jQuery , mas em vez de ocultá-lo, remova todo o elemento, mas copia o conteúdo HTML e a própria tag em uma variável do jQuery e, em seguida, tudo o que você precisa fazer é testar se existe uma tag na tela, usando o normal
if (!$('#thetagname').length)
.fonte
Ao testar um elemento contra o
:hidden
seletor no jQuery, deve-se considerar que um elemento posicionado absoluto pode ser reconhecido como oculto, embora seus elementos filhos sejam visíveis .Isso parece um tanto contra-intuitivo em primeiro lugar - embora uma análise mais detalhada da documentação do jQuery forneça as informações relevantes:
Portanto, isso realmente faz sentido em relação ao modelo de caixa e ao estilo calculado para o elemento. Mesmo que a largura e a altura não sejam explicitamente definidas como 0, elas podem ser definidas implicitamente .
Veja o seguinte exemplo:
Atualização para o jQuery 3.x:
Com o jQuery 3, o comportamento descrito mudará! Os elementos serão considerados visíveis se tiverem caixas de layout, incluindo as de largura e / ou altura zero.
JSFiddle com jQuery 3.0.0-alpha1:
http://jsfiddle.net/pM2q3/7/
O mesmo código JavaScript terá esta saída:
fonte
Isso pode funcionar:
fonte
Exemplo:
fonte
Para verificar se não está visível, eu uso
!
:Ou a seguir, também é o sam, salvando o seletor jQuery em uma variável para obter melhor desempenho quando você precisar dele várias vezes:
fonte
Use alternância de classe, não edição de estilo. . .
Usar classes designadas para "ocultar" elementos é fácil e também um dos métodos mais eficientes. Alternar uma classe 'oculta' com um
Display
estilo 'none' terá um desempenho mais rápido do que editar diretamente esse estilo. Expliquei isso bastante bem na pergunta Stack Overflow: Tornando dois elementos visíveis / ocultos na mesma div .Práticas recomendadas e otimização de JavaScript
Aqui está um vídeo verdadeiramente esclarecedor de um Google Tech Talk do engenheiro front-end do Google, Nicholas Zakas:
fonte
Exemplo de uso da verificação visível do adblocker é ativado:
"ablockercheck" é um ID que o bloqueador de anúncios bloqueia. Portanto, verificando se está visível, você pode detectar se o bloqueador de anúncios está ativado.
fonte
Afinal, nenhum dos exemplos combina comigo, então escrevi o meu.
Testes (sem suporte do Internet Explorer
filter:alpha
):a) Verifique se o documento não está oculto
b) Verifique se um elemento tem largura / altura / opacidade zero ou
display:none
/visibility:hidden
nos estilos embutidosc) Verifique se o centro (também porque é mais rápido que testar todos os pixels / cantos) do elemento não está oculto por outro elemento (e todos os ancestrais, por exemplo:
overflow:hidden
/ scroll / um elemento sobre outro) ou bordas da telad) Verifique se um elemento possui largura / altura / opacidade ou
display:none
visibilidade zero : oculto nos estilos computados (entre todos os ancestrais)Testado em
Android 4.4 (navegador nativo / Chrome / Firefox), Firefox (Windows / Mac), Chrome (Windows / Mac), Opera (Windows Presto / Mac WebKit), Internet Explorer (modos de documento do Internet Explorer 5-11 + Internet Explorer 8 em um máquina virtual) e Safari (Windows / Mac / iOS).
Como usar:
fonte
Você precisa verificar os dois ... Display e visibilidade:
Se procurarmos
$(this).is(":visible")
, o jQuery verificará as duas coisas automaticamente.fonte
Talvez você possa fazer algo assim
fonte
Basta verificar a visibilidade, verificando um valor booleano, como:
Eu usei esse código para cada função. Caso contrário, você pode usar
is(':visible')
para verificar a visibilidade de um elemento.fonte
Porque
Elements with visibility: hidden or opacity: 0 are considered visible, since they still consume space in the layout
(como descrito para jQuery: visible Selector ) - podemos verificar se o elemento é realmente visível desta maneira:fonte
Mas e se o CSS do elemento for como o seguinte?
Portanto, esta resposta à pergunta Stack Overflow Como verificar se um elemento está fora da tela também deve ser considerado.
fonte
Uma função pode ser criada para verificar a visibilidade / exibir atributos, a fim de avaliar se o elemento é mostrado na interface do usuário ou não.
Violino de trabalho
fonte
Também aqui está uma expressão condicional ternária para verificar o estado do elemento e depois alterná-lo:
fonte
$('elementToToggle').toggle('slow');
...:)
fonte