2011-12-22 14 views
2

私は次のコードを持っている:それは指定されたIDを見つけることができないので、IE7でしかし動的に作成されたオブジェクトがDOMに挿入されるのはいつですか?

$(function() { 
    var html = $('<div></div>'); 

    html.load('preview.html', function (responseText, textStatus, XMLHttpRequest) { 
     $('#some_id_in_loaded_html')... 
    } 

    html.dialog(); 
} 

を、コールバック関数でjQueryのセレクタは失敗します。それはFirefoxで正常に動作します。

これはなぜ発生していますか(基準に基づいて)正しい動作ですか?この問題は簡単に$('#some_id_in_loaded_html',this)

+0

これは '$(document).ready()'のコンテキスト内で実行されますか? – jrummell

+0

@jrummell:はい、それは準備ができています() – tskuzzy

答えて

2

$("#foo")を用いて補正されていることを

注で検索するためのコンテキストとしてdocumentを使用して、そのように何も返さないためhtml DIV(とそのIDを持つ要素を含むすべての子孫)はDOMの一部ではありません。

html.appendTo("body");のように、最初にhtml divをDOMに挿入する必要があります。すべての子孫は自動的にDOM内にもあり、$("#foo")が機能します。

実際の検索機能(querySelectorAll)を使用したテストケース:http://jsfiddle.net/k7muh/。この場合

var div = $("<div><div id='foo'></div></div>"); 

// tests to expect div#foo 

console.log(document.querySelectorAll("#foo")); // searches in document and 
                // does not find the element 

console.log(div.get(0).querySelectorAll("#foo")); // searches in the (detached) 
                // div and finds the element 
0

、私はおそらくあなたの非同期コールバックの前に実行され、あなたが.dialog()を呼び出すときに、それが挿入さだと思う(後にいくつかのケースでは、おそらくけど?)。