当动态创建的对象插入到DOM中时
When are dynamically created objects inserted into the DOM?
我有以下代码:
$(function () {
var html = $('<div></div>');
html.load('preview.html', function (responseText, textStatus, XMLHttpRequest) {
$('#some_id_in_loaded_html')...
}
html.dialog();
}
但是在IE7中,回调函数中的jQuery选择器失败了,因为它找不到指定的ID。
为什么会发生这种情况,哪种行为是正确的(根据标准)?
注意,这个问题很容易通过使用$('#some_id_in_loaded_html',this)
$("#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
在这种情况下,我认为它是插入当你调用.dialog()
,这可能会在你的异步回调之前运行(但也许稍后在某些情况下?)。
相关文章:
- 当DOM节点在DOM中移动时,如何阻止Firefox触发mouseleave
- 在Angular中呈现DOM对象时,如何调用控制器中指定的函数
- 在 IE 中从 DOM 中删除选项时,滚动选择元素会跳到顶部
- 当创建和销毁都是AJAX时,在DOM中找不到ID
- 在DOM中搜索字符串时不区分大小写
- 如何在页面加载时替换不在 DOM 中的文本
- 当我尝试两个 DOM 中的 get 元素时,HTML 和 Xpath 结果未定义
- 当 Angular 索引页面加载到 DOM [Angular 模板到静态 HTML] 中时,我可以拍摄它的纯 HTML
- 元素在调用链接函数时不在 DOM 中
- 如何将两个 html 元素绑定在一起,当第一个元素被删除时,第二个元素也从 DOM 中删除
- 当页面保留在DOM中时,如何使用开/关正确解绑Jquery-Mobile中的事件
- 动态变量从 PHP 插入到 DOM 中.在将该变量从 DOM 传递到 Javascript 时遇到问题
- 尝试从 dom 文档中删除 dom 节点时出错
- 在 DOM 中移动元素时,该元素是否保持状态
- 当不在 DOM 中时,如何解绑(删除)角度模型
- 不变冲突:当元素在DOM中时,目标容器不是DOM元素
- 当动态创建的对象插入到DOM中时
- 当元素被添加到DOM中时,JS事件
- 当一个组件被加载到DOM中时,Knockout.js回调
- Polymer元素可以添加一个事件监听器吗;在shadow DOM中时的父元素