Здається, :visibleселектор jQuery не працює для деяких вбудованих елементів у Chrome. Рішення полягає в тому, щоб додати стиль відображення, як-от "block"або "inline-block"змусити його працювати.
Також зауважте, що jQuery має дещо інше визначення того, що видно, ніж багато розробників:
Елементи вважаються видимими, якщо вони займають місце в документі.
Видимі елементи мають ширину або висоту, що перевищує нуль.
Іншими словами, елемент повинен мати ненульову ширину і висоту, щоб споживати простір і бути видимим.
Елементи з visibility: hiddenабо opacity: 0вважаються видимими, оскільки вони все ще займають місце в макеті.
З іншого боку, навіть якщо його visibilityвстановлено hiddenабо непрозорість дорівнює нулю, це все-таки :visiblejQuery, оскільки він забирає простір, що може заплутати, коли CSS прямо говорить, що його видимість прихована.
Елементи, які відсутні в документі, вважаються прихованими; jQuery не має можливості знати, чи вони будуть видимі при додаванні до документа, оскільки це залежить від застосовних стилів.
Усі елементи опції вважаються прихованими, незалежно від обраного стану.
Під час анімації, що приховує елемент, елемент вважається видимим до кінця анімації. Під час анімації для показу елемента елемент вважається видимим на початку в анімації.
Найпростіший спосіб поглянути на це - це те, що якщо ви можете бачити елемент на екрані, навіть якщо ви не бачите його вмісту, він прозорий і т. Д., Він видно, тобто займає місце.
Я трохи очистив вашу розмітку і додав стиль відображення ( тобто встановлення елементів відображення на "блокувати" тощо ), і це працює для мене:
ПІДТВОРЕННЯ
Офіційна довідка API для :visible
Станом на jQuery 3, визначення :visibleдещо змінилося
jQuery 3 трохи змінює значення :visible(і, отже,
:hidden).
Починаючи з цієї версії, елементи будуть розглянуті,
:visibleякщо вони мають будь-які вікна компонування, включаючи нульову ширину та / або висоту. Наприклад, brелементи та вбудовані елементи без вмісту будуть обрані :visibleселектором.