Sembra che il :visible
selettore di jQuery non funzioni per alcuni elementi inline in Chrome. La soluzione è aggiungere uno stile di visualizzazione, come "block"
o "inline-block"
per farlo funzionare.
Si noti inoltre che jQuery ha una definizione leggermente diversa di ciò che è visibile rispetto a molti sviluppatori:
Gli elementi sono considerati visibili se occupano spazio nel documento.
Gli elementi visibili hanno una larghezza o un'altezza maggiore di zero.
In altre parole, un elemento deve avere larghezza e altezza diverse da zero per consumare spazio ed essere visibile.
Gli elementi con visibility: hidden
o opacity: 0
sono considerati visibili, poiché occupano ancora spazio nel layout.
D'altra parte, anche se visibility
è impostato su hidden
o l'opacità è zero, è ancora :visible
su jQuery poiché consuma spazio, il che può creare confusione quando il CSS dice esplicitamente che la sua visibilità è nascosta.
Gli elementi che non sono in un documento sono considerati nascosti; jQuery non ha un modo per sapere se saranno visibili quando vengono aggiunti a un documento poiché dipende dagli stili applicabili.
Tutti gli elementi delle opzioni sono considerati nascosti, indipendentemente dal loro stato selezionato.
Durante le animazioni che nascondono un elemento, l'elemento è considerato visibile fino alla fine dell'animazione. Durante le animazioni per mostrare un elemento, l'elemento è considerato visibile all'inizio dell'animazione.
Il modo più semplice per vederlo è che se puoi vedere l'elemento sullo schermo, anche se non puoi vedere il suo contenuto, è trasparente ecc., È visibile, cioè occupa spazio.
Ho ripulito un po 'il tuo markup e aggiunto uno stile di visualizzazione (ad esempio, impostando la visualizzazione degli elementi su "block" ecc. ), E questo funziona per me:
VIOLINO
Riferimento API ufficiale per :visible
A partire da jQuery 3, la definizione di :visible
è leggermente cambiata
jQuery 3 modifica leggermente il significato di :visible
(e quindi di
:hidden
).
A partire da questa versione, verranno presi in considerazione gli elementi
:visible
se hanno delle caselle di layout, comprese quelle di larghezza e / o altezza zero. Ad esempio, gli br
elementi e gli elementi in linea senza contenuto verranno selezionati dal :visible
selettore.