Можно ли переключать видимость элемента, используя функции .hide()
, .show()
или .toggle()
?
Как бы вы проверили, является ли элемент visible
или hidden
?
javascript
jquery
dom
visibility
Филип Мортон
источник
источник
$(element).is(":visible")
работает для jQuery 1.4.4, но не для jQuery 1.3.2, в Internet & nbsp; Explorer & nbsp; 8 . Это можно проверить с помощью полезного фрагмента теста Цветомира Цонева . Просто не забудьте изменить версию jQuery, чтобы протестировать под каждой.Ответы:
Поскольку вопрос относится к одному элементу, этот код может быть более подходящим:
Это то же самое, что и предложение Твернта , но применяется к одному элементу; и он соответствует алгоритму, рекомендованному в FAQ по jQuery .
Мы используем jQuery's is () для проверки выбранного элемента с помощью другого элемента, селектора или любого объекта jQuery. Этот метод перемещается по элементам DOM, чтобы найти совпадение, которое удовлетворяет переданному параметру. Он вернет true, если есть совпадение, иначе вернет false.
источник
visible=false
иdisplay:none
; в то время как решение Моте явно не учитывает намерение кодеров проверитьdisplay:none
; (через упоминание оdisplay:none
visible=true
:visible
также проверит, видимы ли родительские элементы, как указал Чиборг.display
свойства. Учитывая, что оригинальный вопрос дляshow()
иhide()
, и они задаютdisplay
, мой ответ правильный. Кстати, он работает с IE7, вот тестовый фрагмент - jsfiddle.net/MWZss ;Вы можете использовать
hidden
селектор:И
visible
селектор:источник
type="hidden"
одним только случаем, который может вызвать: скрытый. Элементы без высоты и ширины, элементы сdisplay: none
и элементы со скрытыми предками также будут квалифицироваться как: скрытые.Вышеуказанный метод не учитывает видимость родителя. Чтобы рассмотреть и родителя, вы должны использовать
.is(":hidden")
или.is(":visible")
.Например,
источник
hide()
,show()
иtoggle()
функции, однако, как большинство из них уже сказал, мы должны использовать:visible
и:hidden
псевдо-классы.Ни один из этих ответов не относится к тому, что я понимаю, как к вопросу, который я искал: «Как мне обращаться с предметами, которые имеют
visibility: hidden
?» , Ни с этим,:visible
ни:hidden
с этим не справятся, так как они оба ищут показ согласно документации. Насколько я мог определить, нет селектора для обработки видимости CSS. Вот как я решил (стандартные селекторы jQuery, может быть более сжатый синтаксис):источник
visibility
буквально, но вопрос былHow you would test if an element has been hidden or shown using jQuery?
. Использование jQuery означает:display
свойство.visibility: hidden
илиopacity: 0
считаются видимыми, поскольку они по-прежнему занимают место в макете. См. Ответ Педро Райнхо и документацию jQuery о:visible
селекторе.Из Как определить состояние переключаемого элемента?
Вы можете определить , свернут ли элемент или нет, используя
:visible
и:hidden
селекторы.Если вы просто воздействуете на элемент в зависимости от его видимости, вы можете просто включить
:visible
или:hidden
в выражение селектора. Например:источник
top:-1000px
... Думаю, этоЧасто, проверяя, является ли что-то видимым или нет, вы сразу же идете прямо вперед и делаете с этим что-то еще. JQuery цепочка делает это легко.
Поэтому, если у вас есть селектор, и вы хотите выполнить какое-либо действие с ним, только если он видим или скрыт, вы можете использовать
filter(":visible")
илиfilter(":hidden")
следовать за ним, добавив в цепочку действие, которое вы хотите выполнить.Таким образом, вместо
if
заявления, как это:Или более эффективный, но еще более уродливый
Вы можете сделать все это в одну строку:
источник
:visible
Селектор в соответствии с документацией JQuery :Это полезно в некоторых случаях и бесполезно в других, потому что если вы хотите проверить, является ли элемент видимым (
display != none
), игнорируя видимость родителей, вы обнаружите, что делаете.css("display") == 'none'
не только быстрее, но и вернет проверку видимости правильно.Если вы хотите проверить видимость вместо отображения, вы должны использовать:
.css("visibility") == "hidden"
.Также примите во внимание дополнительные примечания jQuery :
Кроме того, если вы беспокоитесь о производительности, вам следует проверить Теперь вы видите меня… показать / скрыть производительность (2010-05-04). И используйте другие методы, чтобы показать и скрыть элементы.
источник
Это работает для меня, и я использую
show()
иhide()
чтобы сделать мой div скрытым / видимым:источник
Как работает видимость элемента и jQuery ;
Элемент может быть скрыт с
display:none
,visibility:hidden
илиopacity:0
. Разница между этими методами:display:none
скрывает элемент и не занимает места;visibility:hidden
скрывает элемент, но все равно занимает место в макете;opacity:0
скрывает элемент как «видимость: скрытый», и он все еще занимает место в макете; единственное отличие состоит в том, что непрозрачность позволяет сделать элемент частично прозрачным;Полезные методы переключения jQuery:
источник
visibility:hidden
иopacity:0
заключается в том, что элемент будет по-прежнему реагировать на события (например, щелчки)opacity:0
. Я узнал этот трюк, создав пользовательскую кнопку для загрузки файлов.Вы также можете сделать это с помощью простого JavaScript:
Ноты:
Работает везде
Работает для вложенных элементов
Работает для CSS и встроенных стилей
Не требует рамки
источник
visibility: hidden
, что видно .Я бы использовал CSS класс
.hide { display: none!important; }
.Для сокрытия / показа я звоню
.addClass("hide")/.removeClass("hide")
. Для проверки видимости я использую.hasClass("hide")
.Это простой и понятный способ проверить / скрыть / показать элементы, если вы не планируете использовать методы
.toggle()
или.animate()
методы.источник
.hasClass('hide')
не проверяет, является ли предок родителя скрытым (что также сделало бы его скрытым). Вы могли бы заставить это работать правильно, проверив.closest('.hide').length > 0
, но зачем изобретать велосипед?Демо-ссылка
Источник:
Blogger Plug n Play - Инструменты и виджеты jQuery: как узнать, скрыт ли элемент или виден с помощью jQuery
источник
Можно просто использовать атрибут
hidden
orvisible
, например:Или вы можете упростить то же самое с IS следующим образом .
источник
ebdiv
должен быть установлен вstyle="display:none;"
. Это работает как для показа, так и для скрытия:источник
Другой ответ, который вы должны принять во внимание: если вы скрываете элемент, вы должны использовать jQuery , но вместо того, чтобы фактически скрыть его, вы удаляете весь элемент, но копируете его HTML- содержимое и сам тег в переменную jQuery, а затем все, что вам нужно сделать, это проверить, есть ли такой тег на экране, используя обычный
if (!$('#thetagname').length)
.источник
При тестировании элемента с
:hidden
селектором в jQuery следует учитывать, что элемент с абсолютным позиционированием может быть распознан как скрытый, хотя его дочерние элементы являются видимыми .Во-первых, это кажется несколько нелогичным - хотя более внимательный взгляд на документацию jQuery дает соответствующую информацию:
Так что это действительно имеет смысл в отношении блочной модели и вычисляемого стиля для элемента. Даже если ширина и высота не установлены явно в 0, они могут быть установлены неявно .
Посмотрите на следующий пример:
Обновление для jQuery 3.x:
С jQuery 3 описанное поведение изменится! Элементы будут считаться видимыми, если у них есть какие-либо поля макета, в том числе с нулевой шириной и / или высотой.
JSFiddle с jQuery 3.0.0-alpha1:
http://jsfiddle.net/pM2q3/7/
Тот же код JavaScript будет иметь такой вывод:
источник
Это может работать:
источник
Пример:
источник
Чтобы проверить, если он не виден, я использую
!
:Или следующее также sam, сохраняя селектор jQuery в переменной, чтобы иметь лучшую производительность, когда вам это нужно несколько раз:
источник
Используйте переключение классов, а не редактирование стилей. , ,
Использование классов, предназначенных для «сокрытия» элементов, легко, а также является одним из наиболее эффективных методов. Переключение класса «скрытый» со
Display
стилем «нет» будет выполняться быстрее, чем непосредственное редактирование этого стиля. Я довольно подробно объяснил это в вопросе переполнения стека. Превращение двух элементов, видимых / скрытых в одном и том же элементе div .Лучшие практики и оптимизация JavaScript
Вот действительно поучительное видео Google Tech Talk, созданного инженером Google Николасом Закасом:
источник
Пример использования видимой проверки для adblocker активирован:
«ablockercheck» - это идентификатор, который блокирует adblocker. Поэтому, проверив, виден ли он, вы можете определить, включен ли adblocker.
источник
В конце концов, ни один из примеров меня не устраивает, поэтому я написал свой собственный.
Тесты (без поддержки Internet Explorer
filter:alpha
):а) Проверьте, не скрыт ли документ
б) Проверьте, имеет ли элемент нулевую ширину / высоту / непрозрачность или
display:none
/visibility:hidden
во встроенных стиляхc) Убедитесь, что центр (и потому что он быстрее, чем тестирование каждого пикселя / угла) элемента не скрыт другим элементом (и всеми предками, например:
overflow:hidden
/ scroll / один элемент над другим) или краями экранаd) Проверьте, имеет ли элемент нулевую ширину / высоту / непрозрачность или
display:none
/ видимость: скрыто в вычисляемых стилях (среди всех предков)Проверено на
Android 4.4 (собственный браузер / Chrome / Firefox), Firefox (Windows / Mac), Chrome (Windows / Mac), Opera (Windows Presto / Mac WebKit), Internet Explorer (режимы документов Internet Explorer 5-11 + Internet Explorer 8 на компьютере). виртуальная машина) и Safari (Windows / Mac / iOS).
Как пользоваться:
источник
Вы должны проверить оба ... Отображение, а также видимость:
Если мы проверяем
$(this).is(":visible")
, jQuery автоматически проверяет обе вещи.источник
Может быть, вы можете сделать что-то вроде этого
источник
Просто проверьте видимость, проверив логическое значение, например:
Я использовал этот код для каждой функции. В противном случае вы можете использовать
is(':visible')
для проверки видимости элемента.источник
Потому что
Elements with visibility: hidden or opacity: 0 are considered visible, since they still consume space in the layout
(как описано для jQuery: visible Selector ) - мы можем проверить, действительно ли элемент виден таким образом:источник
Но что, если CSS элемента похож на следующее?
Таким образом, этот ответ на вопрос переполнения стека. Как проверить, находится ли элемент вне экрана, также должен быть рассмотрен.
источник
Можно создать функцию для проверки атрибутов видимости / отображения, чтобы определить, отображается ли элемент в пользовательском интерфейсе или нет.
Рабочая скрипка
источник
Также вот троичное условное выражение, чтобы проверить состояние элемента и затем переключить его:
источник
$('elementToToggle').toggle('slow');
...:)
источник