Кажется, :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
.