Si nous ne faisons que collecter des méthodes de base pour détecter la visibilité, je ne vais pas oublier:
opacity > 0.01; // probably more like .1 to actually be visible, but YMMV
Et quant à la façon d'obtenir des attributs:
element.getAttribute(attributename);
Donc, dans votre exemple:
document.getElementById('snDealsPanel').getAttribute('visibility');
Mais quoi? Ça ne marche pas ici. Regardez de plus près et vous constaterez que la visibilité est mise à jour non pas en tant qu'attribut sur l'élément, mais en utilisant la style
propriété. C'est l'un des nombreux problèmes que vous rencontrez lorsque vous essayez de faire ce que vous faites. Entre autres: vous ne pouvez pas garantir qu'il y a réellement quelque chose à voir dans un élément, simplement parce que sa visibilité, son affichage et son opacité ont tous les bonnes valeurs. Il peut encore manquer de contenu ou manquer de hauteur et de largeur. Un autre objet pourrait l'obscurcir. Pour plus de détails, une recherche rapide sur Google révèle ce , et inclut même une bibliothèque pour essayer de résoudre le problème. (YMMV)
Consultez les éléments suivants, qui sont des doublons possibles de cette question, avec d'excellentes réponses, y compris quelques aperçus du puissant John Resig. Cependant, votre cas d'utilisation spécifique est légèrement différent de celui standard, donc je m'abstiendrai de signaler:
(MODIFICATION: OP DIT QU'IL PERMET DE RETIRER DES PAGES, PAS LES CRÉER, DONC CI-DESSOUS N'EST PAS APPLICABLE) Une meilleure option? Liez la visibilité des éléments aux propriétés du modèle et toujours rendre la visibilité dépendante de ce modèle, tout comme Angular le fait avec ng-show. Vous pouvez le faire en utilisant n'importe quel outil que vous voulez: JS angulaire, simple, peu importe. Mieux encore, vous pouvez changer l'implémentation DOM au fil du temps, mais vous pourrez toujours lire l'état du modèle, au lieu du DOM. Lire votre vérité depuis le DOM est mauvais. Et lent. Il est préférable de vérifier le modèle et de faire confiance à votre implémentation pour vous assurer que l'état DOM reflète le modèle. (Et utilisez des tests automatisés pour confirmer cette hypothèse.)
document.getElementById('snDealsPanel').style.visibility