Если мы просто собираем основные способы определения видимости, позвольте мне не забыть:
opacity > 0.01; // probably more like .1 to actually be visible, but YMMV
А что касается того, как получить атрибуты:
element.getAttribute(attributename);
Итак, в вашем примере:
document.getElementById('snDealsPanel').getAttribute('visibility');
А чего? Это не работает здесь. Посмотрите внимательнее, и вы увидите, что видимость обновляется не как атрибут элемента, а с использованием style
свойства. Это одна из многих проблем, связанных с попытками сделать то, что вы делаете. Среди прочего: вы не можете гарантировать, что на самом деле есть что-то, что можно увидеть в элементе, просто потому что его видимость, отображение и прозрачность имеют правильные значения. В нем по-прежнему может отсутствовать содержимое или высота и ширина. Другой объект может скрыть это. Для более подробной информации, быстрый поиск Google показывает это , и даже включает в себя библиотеку, чтобы попытаться решить проблему. (YMMV)
Проверьте следующее, которые являются возможными дубликатами этого вопроса, с отличными ответами, включая некоторое понимание могущественного Джона Резига. Однако ваш конкретный вариант использования немного отличается от стандартного, поэтому я воздержусь от пометки:
(РЕДАКТИРОВАТЬ: ОП СКАЗЫВАЕТ, ЧТО ОН УТРАЧАЕТСЯ СТРАНИЦАМИ, НЕ СОЗДАВАЯ ИХ, ТАК НИЖЕ НЕ ПРИМЕНИМО) Лучше вариант? Привязать видимость элементов к свойствам модели и всегда делать видимость зависимой от этой модели, как это делает Angular с ng-show. Вы можете сделать это, используя любой инструмент: Angular, plain JS, что угодно. Более того, вы можете со временем изменить реализацию DOM, но вы всегда сможете читать состояние из модели, а не из DOM. Чтение вашей правды из DOM - это плохо. И медленно. Гораздо лучше проверить модель и довериться реализации, чтобы убедиться, что состояние DOM отражает модель. (И используйте автоматическое тестирование, чтобы подтвердить это предположение.)
document.getElementById('snDealsPanel').style.visibility