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