2012-03-23 8 views
5

que atravesaba a través de una jerarquía de marcos, y probamos el siguiente para encontrar el marco superior:¿Por qué "ventana = ventana.parent"; crear un ciclo infinito?

var win = window; 
while (win.parent) { 
    //perform actions on win 
    win = win.parent; 
} 

Por ahora, sé que la condición de bucle correcto debe ser:

while (win !== top) { 

La comprobación de la existencia en win.parent aparentemente crea un bucle infinito. ¿Hay alguna razón en particular por la cual es así? ¿Por qué debería top tener un padre?

+0

¿Ha intentado con lo que es 'top.parent'? –

+0

Tal vez así se marque 'arriba' - ¿quizás el marco superior se tiene a sí mismo como padre? –

Respuesta

5

También debe verificar si window.parent == window​ es false si no, terminará con un bucle infinito. Couse si no hay un elemento principal, la propiedad principal se referirá a sí misma (ciclo infinito).

var win = window; 
while (win.parent && win.parent != win) { 
    //perform actions on win 
    win = win.parent; 
}​ 

http://jsfiddle.net/EZfHf/

He encontrado esto en MDN:

Si una ventana no tiene un padre, su propiedad principal es una referencia a sí mismo.

Enlace a MDN:

https://developer.mozilla.org/en/DOM/window.parent

2

top 's controladora es ella misma.

top == top.parent //true 
Cuestiones relacionadas