2012-03-23 15 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'を確認しようとしましたか? –

+0

これはおそらく、「トップ」がどのようにフラグが立てられているのでしょうか?トップフレーム自体が親として存在するのでしょうか? –

答えて

5

また、window.parent == window​falseであるかどうかをチェックすると、無限ループになります。親がない場合は、親プロパティが自身を参照します(無限ループ)。

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 
関連する問題