2011-06-29 22 views
0

すべてのフレームが同じドメインにあると仮定して、特定のノード(またはドキュメント)から開始し、指定されたIDを持つ要素を検索する必要があります。現在のドキュメントで見つからない場合は、すべての子孫iframeを再帰的に(幅優先に)検索する必要があります。フレームを介してIDで子孫要素を検索する

私はいくつかの落とし穴を逃していない限り、私はこの機能を書くことができると確信していますが、誰かが既にそれをしていると確信しています。

私のアプリではjQueryを使用していませんので、他のSO読者には言い訳がありますが、それは助けになりません。しかし、私はPrototypeを使用しています。すべての子孫iframeにプロトタイプが含まれていると仮定できます。

アドバイスはありますか?

答えて

4

私はあなたがこのように再帰的にそれを得ることができると思う:

function findElement(wdw, id) 
{ 
    var el = wdw.document.getElementById(id); 
    if(el) return el; 
    for(var i=0; i<wdw.frames.length; i++) 
    { 
     var el = findElement(wdw.frames[i].window, id); 
     if(el) return el; 
    } 

    return null; 
} 

とこのようにそれを呼び出す:ここ

findElement(window, "aa"); 

がjsFiddlerリンクです:http://jsfiddle.net/QxL7z/2/

+0

私はこれはかなり近いと思い、しかし、無限ループになります。あなたは関数を再帰的に呼び出すときに "wdw"を変更していません。おそらく、その再帰呼び出しは次のようにする必要があります:findElement(window.frames [i] .contentWindow、id)? – desau

+0

ああ、私の悪い、あなたは正しい、今それを編集します:)しかし、あなたは正しいアイデアを持っていますか? –

+0

ええ - その変更で、それは完全に動作します。ありがとう! – desau

関連する問題