2008-12-02 14 views
7

Esto no debe confundirse con "How to tell if a DOM element is visible?"¿Cómo saber si se muestra un elemento DOM?

Quiero determinar si un elemento DOM dado es visible en la página. P. ej. si el elemento es hijo de un padre que tiene display:none; establecido, entonces no será visible.

(Esto no tiene nada que ver con si el elemento está en la ventana gráfica o no)

pude recorrer cada padre del elemento, comprobando el estilo display, pero me gustaría saber si hay una forma más directa?

Respuesta

14

A partir de una prueba rápida en Firefox, parece que las propiedades de tamaño y posición (clientWidth, offsetTop, etc.) devuelven 0 cuando un elemento está oculto por un elemento primario que es display:none.

+3

Buena idea. Incluso se especifica: http://www.w3.org/TR/cssom-view/#offset-attributes – Kornel

+1

En el borrador del módulo de vista de CSSOM actual (2013), el enlace publicado por @Kornel ya no apunta a la sección de la derecha. Consulte [w3.org/TR/cssom-view/#dom-htmlelement-offsettop](http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsettop). – falconepl

1

Usando Prototype:

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

Hubiera sido más útil si hubiera proporcionado el código fuente para esta función de Prototype, para mostrar cómo podría hacerse. –

+3

Solo uso la biblioteca. Yo no lo escribí –

0

Como estoy usando MochiKit, lo que me ocurrió con base en la respuesta de Ant P fue:

getElementPosition('mydiv').y != 0 

también puedo comprobar si está en el área de visualización (verticalmente) por:

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

Por cierto, esto también funciona en IE6.

+0

+1 para MochiKit - Me encanta MK. –

0

Depender de la posición 0 es frágil. Es mejor que escribas una función de ayudante para repetir a través de los padres y verificar su estilo de visualización directamente.

+0

¿Cuidar para elaborar? Si está en el estándar, es compatible con el público que cumple con los estándares (FF, WebKit, ...) y cuenta con el respaldo del gorila que no cumple con las normas, ¿qué lo hace frágil? –

+0

@BenBlank: ¿y si un elemento mostrado realmente tiene la posición 0? – mgol

0

Aquí está la solución iterativa -

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); 
} 
Cuestiones relacionadas