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