2012-03-23 18 views
5

byłem przejeżdżające przez hierarchię ramki i próbowałem następujące znaleźć górny Rama:Dlaczego "window = window.parent;" stworzyć nieskończoną pętlę?

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

Teraz już wiem, że prawidłowy stan pętli musi być:

while (win !== top) { 

Kontrola istnienie na win.parent pozornie tworzy nieskończoną pętlę. Czy istnieje jakiś szczególny powód, dla którego tak jest? Dlaczego top ma rodzica?

+0

Czy próbowałeś sprawdzić, co to jest "top.parent"? –

+0

Być może w ten sposób oflagowane jest "góra" - może górna ramka ma się jako rodzic? –

Odpowiedz

5

Powinieneś również sprawdzić, czy window.parent == window​ jest false, bo w przeciwnym razie skończysz z nieskończoną pętlą. Couse, jeśli nie ma rodzica, własność rodzica odwołuje się do siebie (nieskończona pętla).

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

http://jsfiddle.net/EZfHf/

Znalazłem to na MDN:

Jeśli okno nie posiada rodzica, jego własność rodziców jest odniesienie do siebie.

Link do MDN:

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

2

top jest dominująca sama.

Powiązane problemy