通常情况下,当我想在页面的DOM完全加载后执行一些代码(99%的情况是初始化代码)时,我会使用
事情是这样的:可以安全地假设
domReady()
函数(无论是jQuery的还是手动编写的)。
现在,我需要将一些HTML模板附加到DIV元素中,但之后我需要获取添加到其中的一些元素并对它们进行操作(更改文本、附加事件、设置验证消息和掩码等)。
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都会进入加载状态吗?
-- 编辑
这是我正在使用的domReady()函数:
function domReady(f) {
/in/.test(document.readyState) ? setTimeout('domReady('+f+')', 9) : f();
}
PS:我需要一个简单/短/不依赖API的函数,所以我在一段时间前在SE上找到了这个。
提前致谢。
innerHTML += more_stuff;
)会导致浏览器重新解析受影响容器的所有内容。 这不是最有效的方法。 - Pointy