Si solo estamos recopilando formas básicas de detectar la visibilidad, no me olvides:
opacity > 0.01; // probably more like .1 to actually be visible, but YMMV
Y en cuanto a cómo obtener atributos:
element.getAttribute(attributename);
Entonces, en tu ejemplo:
document.getElementById('snDealsPanel').getAttribute('visibility');
Pero que? No funciona aqui. Mire más de cerca y verá que la visibilidad se está actualizando no como un atributo en el elemento, sino usando la style
propiedad. Este es uno de los muchos problemas al intentar hacer lo que estás haciendo. Entre otros: no puede garantizar que realmente haya algo que ver en un elemento, solo porque su visibilidad, visualización y opacidad tienen los valores correctos. Todavía puede carecer de contenido, o puede carecer de altura y anchura. Otro objeto podría oscurecerlo. Para más detalles, una búsqueda rápida en Google revela esto , e incluso incluye una biblioteca para tratar de resolver el problema. (YMMV)
Eche un vistazo a lo siguiente, que son posibles duplicados de esta pregunta, con excelentes respuestas, que incluyen algunas ideas del poderoso John Resig. Sin embargo, su caso de uso específico es ligeramente diferente del estándar, por lo que me abstendré de marcar:
(EDITAR: OP DICE QUE ESTÁ RASGANDO PÁGINAS, NO LOS CREA, ASÍ QUE NO ES APLICABLE A CONTINUACIÓN) ¿Una mejor opción? Vincula la visibilidad de los elementos a las propiedades del modelo y siempre haz que la visibilidad dependa de ese modelo, al igual que Angular hace con ng-show. Puede hacerlo usando cualquier herramienta que desee: JS angular, simple, lo que sea. Mejor aún, puede cambiar la implementación del DOM con el tiempo, pero siempre podrá leer el estado del modelo, en lugar del DOM. Leer tu verdad desde el DOM es malo. Y lento Es mucho mejor verificar el modelo y confiar en su implementación para garantizar que el estado DOM refleje el modelo. (Y use pruebas automatizadas para confirmar esa suposición).
document.getElementById('snDealsPanel').style.visibility