我有以下代码:
$(function () {
var html = $('<div></div>');
html.load('preview.html', function (responseText, textStatus, XMLHttpRequest) {
$('#some_id_in_loaded_html')...
}
html.dialog();
}
但是在IE7中,回调函数中的jQuery选择器失败,因为它找不到指定的ID。它在Firefox中运行良好。
为什么会发生这种情况,哪种行为正确(根据标准)?
请注意,使用$('#some_id_in_loaded_html',this)
答案 0 :(得分:2)
$("#foo")
使用document
作为搜索的上下文,因此不会返回任何内容,因为html
div(及其所有后代包括具有该ID的元素)不是DOM的一部分。
您必须先将html
div插入DOM,例如html.appendTo("body");
。然后,所有后代也自动也在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
答案 1 :(得分:0)
在这种情况下,我认为它是在你调用.dialog()
时插入的,它可能会在你的异步回调之前运行(但在某些情况下可能会稍后?)。