Parece que o :visible
seletor do jQuery não funciona para alguns elementos embutidos no Chrome. A solução é adicionar um estilo de exibição, como "block"
ou "inline-block"
fazê-lo funcionar.
Observe também que o jQuery tem uma definição um pouco diferente do que é visível do que muitos desenvolvedores:
Os elementos são considerados visíveis se consumirem espaço no documento.
Os elementos visíveis têm uma largura ou altura maior que zero.
Em outras palavras, um elemento deve ter largura e altura diferentes de zero para consumir espaço e ser visível.
Elementos com visibility: hidden
ou opacity: 0
são considerados visíveis, pois ainda consomem espaço no layout.
Por outro lado, mesmo que visibility
esteja definido como hidden
ou a opacidade seja zero, ainda é o :visible
jQuery, pois consome espaço, o que pode ser confuso quando o CSS diz explicitamente que sua visibilidade está oculta.
Elementos que não estão em um documento são considerados ocultos; O jQuery não tem como saber se eles serão visíveis quando anexados a um documento, pois depende dos estilos aplicáveis.
Todos os elementos de opção são considerados ocultos, independentemente do estado selecionado.
Durante as animações que ocultam um elemento, o elemento é considerado visível até o final da animação. Durante as animações para mostrar um elemento, o elemento é considerado visível no início da animação.
A maneira mais fácil de ver isso é que, se você pode ver o elemento na tela, mesmo que não possa ver seu conteúdo, é transparente, etc., é visível, ou seja, ocupa espaço.
Limpei um pouco a sua marcação e adicionei um estilo de exibição ( ou seja, definir os elementos para "bloquear" etc ), e isso funciona para mim:
FIDDLE
Referência oficial da API para :visible
No jQuery 3, a definição de :visible
mudou ligeiramente
O jQuery 3 modifica levemente o significado de :visible
(e, portanto, de
:hidden
).
A partir desta versão, os elementos serão considerados
:visible
se tiverem caixas de layout, incluindo as de largura e / ou altura zero. Por exemplo, br
elementos e elementos embutidos sem conteúdo serão selecionados pelo :visible
seletor.