2012-03-23 56 views
5

我是通過一個框架層次遍歷,並試圖下面找到頂部框架:爲什麼「window = window.parent;」創建一個無限循環?

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

到現在爲止,我知道,正確的循環條件必須是:

while (win !== top) { 

存在檢查在win.parent看似造成了無限循環。這有什麼特別的原因嗎?爲什麼top有父母?

+0

您是否嘗試過檢查「top.parent」? – 2012-03-23 10:39:34

+0

也許這就是'頂部'如何被標記 - 也許頂部框架本身作爲父母? – 2012-03-23 10:40:51

回答

5

您還應該檢查window.parent == window​是否爲false否則您將以無限循環結束。 Couse如果沒有父對象,則父對象將引用自身(無限循環)。

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

http://jsfiddle.net/EZfHf/

我發現這對MDN:

如果一個窗口沒有父母,其父屬性是一個參考 本身。

鏈接到MDN:

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

2

top的母公司本身。

top == top.parent //true