Как узнать, отображается ли элемент DOM?

Не следует путать с "Как узнать, виден ли элемент DOM?"

Я хочу определить, отображается ли данный элемент DOM на странице. Например. если элемент является дочерним по отношению к родительскому элементу, для которого установлен display:none;, он не будет виден.

(Это не имеет никакого отношения к тому, находится ли элемент в области просмотра или нет)

Я мог бы перебрать каждый родительский элемент, проверяя стиль display, но я хотел бы знать, есть ли более прямой способ?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
8
0
8 183
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

Из быстрого теста в Firefox, похоже, что все свойства размера и положения (clientWidth, offsetTop и т. д.) Возвращают 0, когда элемент скрыт родительским элементом, являющимся display:none.

Хорошая идея. Даже указано: w3.org/TR/cssom-view/#offset-attributes

Kornel 03.12.2008 03:15

В текущем проекте модуля просмотра CSSOM (2013 г.) ссылка, размещенная @Kornel, больше не указывает на правый раздел. Проверьте w3.org/TR/cssom-view/#dom-htmlelement-offsettop.

falconepl 10.10.2015 21:15

Используя Прототип:

if ($('someDiv').visible) {...}

Было бы более полезно, если бы вы предоставили исходный код для этой функции Prototype, чтобы показать, как это можно сделать на самом деле.

Chris MacDonald 04.12.2008 18:47

Пользуюсь только библиотекой. Я этого не писал.

Diodeus - James MacFarlane 04.12.2008 20:48

Поскольку я использую MochiKit, на основе ответа Ant P я пришел к следующему:

getElementPosition('mydiv').y != 0

Я также могу проверить, находится ли он в области просмотра (по вертикали):

y = getElementPosition('mydiv').y
(y < getViewportPosition().y + getViewportDimensions().h &&
    getViewportPosition().y < y)

Кстати, это работает и в IE6.

Полагаться на позицию, равную 0, хрупко. Лучше написать вспомогательную функцию для перебора родителей, чтобы напрямую проверить их стиль отображения.

Хотите уточнить? Если он находится в стандарте, поддерживается группой, соответствующей стандартам (FF, WebKit,…), и поддерживается несовместимой гориллой, что делает его хрупким?

Ben Blank 13.01.2009 22:20

Вот итеративное решение -

var elementShown = function(e){
    if (e == document) 
      return true;

    if ($(e).css('display') == 'none') //or whatever your css function is
      return false;

    return elementShown(e.parentNode);
}

.getClientRects() вернет пустой массив, если элемент не отображается по наследству (display = "none" из родительского / предкового элемента)

Другие вопросы по теме