2012-01-26 6 views
2

iframe内にネストされたiframe内にネストされたiframeを根絶する必要があります。奇妙な無限ループ - すなわち、

私のコードの構造を以下に示します。すべてのブラウザでうまく動作しますが、無限ループが発生します。しかし、CPUが無限ループに陥っている間は、CPUはまったく引き上げられません。

var getNested_iframes = function (document_element) { 
     $.each(document_element.find("iframe"), function() { 
      getNested_iframes($($(this)[0].document)); 
     }); 
     alert("."); 
    } 
    getNested_iframes($(myWindow._element)); 
    alert("done"); 
+5

'$(this)[0]'はちょうど 'this'と同じです... – Pointy

答えて

0

私はあなたがそれをやっているだけのようにあなたがそれをやっている理由は、非常にわからないんだけど、「$($(この)[0] .document)は」少しは私にTCH怪しげに見えます。いずれにせよ、jqueryオブジェクトは本質的に任意のサイズのリストなので、再帰ではなく反復でこれを行うことができます(再帰から反復までスワップすることができます。片付ける)。それも、あなたがなどがありますどのように多くのレベル、各レベルであり、そしてどのようにそれらの多くを追跡することができます以下の

$startlist = $(myWindow._element); 

while($startlist.length > 0) 
{ 
    $nextlist = $startlist.find("iframe"); 
    alert("(" + nextlist.length + ")"); 
    $startlist = $nextlist; 
} 

alert("done"); 

を試してみてください。

+0

はい!それはうまくいった。私はエラーが発生していたデバッガのスクリーンショットを撮った。私は間違ってデバッガを読んでいるかもしれないが、IEのように別のオブジェクトの中に問題のオブジェクトがあります。 http://i1120.photobucket.com/albums/l493/powerfulcrunch/whatthehell.png –

+1

IEには、意図していない場所にDOMオブジェクトラッパーを追加する習慣があります。私は特にテーブルの周りに気づいていますが、確かにそれが栽培される唯一の場所ではありません。 –

+0

ああ待って!それは動作しますが、それは1つのレベルを下回るだけです。私はネストされたiframeがある状況にいるので、再帰が必要です。 –