【发布时间】:2013-12-04 17:10:19
【问题描述】:
通常,当我确定页面的 DOM 已完全加载(99% 的情况是初始化代码)后,我想执行一些代码时,我会使用 domReady() 函数(jQuery 或手工制作的函数)。
现在我必须在 DIV 元素中添加一些 HTML 模板,但之后我需要获取一些添加到其中的元素并对其进行操作(更改文本、附加事件、设置验证消息和掩码等)。 )。
div.innerHTML += htmlTemplate; // Template which has the "someInput" input
var someInput = document.getElementById('someInput');
问题是:假设 input 已加载到 DOM 中是否安全?将 HTML 附加到 DIV 后,是否必须将依赖于新 DOM 元素的代码作为回调发送到 domReady 函数?
div.innerHTML += htmlTemplate;
domReady(function(){
var someInput = document.getElementById('someInput');
// ...
});
从技术上讲...每次向元素添加纯 HTML 时,DOM 是否会进入loading state?
-- 编辑
这是我正在使用的 domReady() 函数:
function domReady(f) {
/in/.test(document.readyState) ? setTimeout('domReady('+f+')', 9) : f();
}
PS:我需要一个简单/简短/不依赖 api 的函数,所以我前段时间在 SE 遇到了这个。
提前致谢。
【问题讨论】:
-
DOM 事件 'load' 仅在第一次加载时触发一次。更多信息:w3.org/TR/DOM-Level-3-Events/#event-type-load
-
其实我目前的“domReady()”函数是依赖于文档的readystate...我将其添加到问题中。
-
我不明白...我是否必须向要添加 HTML 的 DIV 添加“就绪”事件处理程序?
-
像这样 (
innerHTML += more_stuff;) 附加 HTML 会导致浏览器重新解析 all 受影响容器的内容。这不是最有效的做法。
标签: javascript html dom