2011-06-04 6 views
0

ウェブページのHTMLをiframeに読み込んで解析し、その後DOMで検索してみようとしています。私は、次のjQuery .find()が時々見つからない

function callback(bdy) { 
    alert($(bdy).find('bar').length); 
} 

ような何かを行う場合はここでコールバック関数で

function f(callback) { 
    var tmp = document.createElement('iframe'); 
    $(tmp).hide(); 
    $(tmp).insertAfter($('foo')); 
    $(tmp).attr('src', url); 

    $(tmp).load(function() { 
     var bdy = tmp.contentDocument.body; 
     callback(bdy); 
     $(tmp).remove(); 
    }); 
} 

コードは、時にはそれは私に正しい値を与えていますが、時にはそれは、代わりに私に0を与えます。 setTimeout()は、クライアントの終了に依存しているのでしかし、私は次の操作を実行した場合、それは

var tmp = document.createElement('iframe'); 
$(tmp).hide(); 
$(tmp).insertAfter($('foo')); 
$(tmp).attr('src', url); 

$(tmp).load(function(tmp) { 
    setTimeout(function() { 
     var bdy = tmp.contentDocument.body; 
     callback(bdy); 
     $(tmp).remove(); 
    }, '100'); 
}); 

を動作しますが、私は同じ目標を達成するための任意のより良い方法があるかどうかを知りたいです。ありがとう。

答えて

0

thisの質問とその多くの回答および関連する質問を確認してください。


更新。 がロードされるまで待つコードは次のとおりです。

function f(callback) { 
    var tmp = document.createElement('iframe'), 
     $tmp = $(tmp); 
    $tmp.hide() 
     .insertAfter($('foo')) 
     .attr('src', url); 

    $tmp.load(function() { 
     var bdy = tmp.contentDocument.body, 
      $bdy = $(bdy); // small optimization 

     var waitForBar = function() { 
      if($bdy.find('#bar').length > 0) { 
       callback(bdy); 
       $tmp.remove(); 
      } else 
       setTimeout(waitForBar, 50); 
     }; 
     waitForBar(); 
    }); 
} 
+0

私はそこから受け入れられた解決策を使用していますが、私の問題は解決しません。私はiframeにロードするのではなく、ウェブサイトに直接関数を適用しても、いつも動かないことに気がつきました。 – nichehole

+0

あなたのコールバックでは、 'alert($(bdy))'を試してみるとどうなるでしょうか? FirebugやChromeを使用している場合は、 'console.log($、bdy、$(bdy)、$(bdy).find( '#bar'))'を実行し、結果をコメントしますか? – Simeon

+0

'alert($(bdy))'を実行すると、常に '[object HTMLBodyElement]'が返されます。 クロムを使用すると、 'console.log($、bdy、$ bdy)、$(bdy).find( '#bar'))'は常に関数 '(a、b){return new e.fn.コンソール内の ''ノードを起動しますが、ときどき ''#bar''を含むノードしか表示されません。 私はウェブページがいくつかのjavascriptを介して '#bar''を含むノードをDOMに追加していると思うし、時にはその前にjqueryはそのページの読み込みが完了したと思っていますか? – nichehole

関連する問題