为什么“window = window.parent;”创造一个无限循环?

时间:2012-03-23 10:35:59

标签: javascript dom

我正在遍历框架层次结构,并尝试以下方法来查找顶部框架:

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

到目前为止,我知道正确的循环条件必须是:

while (win !== top) {

win.parent上的存在检查似乎创造了一个无限循环。这有什么特别的原因吗?为什么top有父母?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

top的父母本身就是。

top == top.parent //true