加载 DOM 后应该运行一个脚本,因为它有一个 DOM 调用:
var element = document.getElementById('element');
element.style.color = 'red';
我怎样才能运行这个脚本,以便脚本对 DOM 的访问能够正常工作?
加载 DOM 后应该运行一个脚本,因为它有一个 DOM 调用:
var element = document.getElementById('element');
element.style.color = 'red';
我怎样才能运行这个脚本,以便脚本对 DOM 的访问能够正常工作?
对于那些不知道为什么可以访问表单元素的脚本不起作用的人
<script>document.getElementById('element').style.color = 'red';</script>
:该脚本尝试与页面上的 HTML 元素交互,这些元素的代码比脚本本身的代码低。因此,脚本已经加载,但您需要与之交互的元素尚未加载。出于这个原因,什么都行不通。
Javascript 语言的特点是它的代码是按顺序逐行执行的,就像它们写在源代码中一样。
解决此问题的选项:
一种简单的方法是
<script></script>
在所有元素之后将其移动到主体。通过这种安排,DOM 将首先加载,然后是脚本。例子:所有初学者想到的最简单的方法是在
window.onload
. 例子:您也可以通过
window.addEventListener('load', ...);
或添加window.attachEvent('onload', ...);
但是这种方法有一个缺点:如果网站页面上有很多图片需要半小时加载,那么脚本只有在所有图片都加载完之后才会执行,这样会耗费很多时间。
另一个缺点是您不能以这种方式指定多个函数。那些。如果您
window.onload
在代码中使用了两次,那么第二个函数将擦除第一个函数。但为了解决这个问题,我制作了一个有趣的拐杖:一个有趣的选择是介于第一点和第二点之间。创建一个自定义函数并通过主体末尾的脚本调用它。例子:
在JS中:
在 HTML 中:
最流行的技巧之一是为正文设置事件
onload
。例子:在JS中:
在 HTML 中:
enStackOveflow 的方式是通过
document.onreadystatechange
和函数运行document.readyState
。例子:一种相当新的方法是通过
DOMContentLoaded
. 例子:IE9+开始支持该方法
好吧,图书馆的选择出现了。还有我们的第一个
JQueryScriptJava 库。例子:[下载库]
适用于任何使用 JQuery 的人的一个选项是使用 JQuery :)。例子:
选项1:
选项 2:
[图书馆链接]
还有一个使用 UI YAHOO 的选项。不幸的是,要使这种方法起作用,我们需要包含多达 2 个脚本:
yahoo-min
和event-min
. 例子:[下载 "yahoo-min.js" ] | [下载 "event-min.js" ]
最有效的选择是使用 enStackOverflow 的自写函数。在 IE8 中工作:
变种准备好=(功能(){
} // Internet Explorer 的 DOM 就绪检查函数 doScrollCheck() { if ( ReadyObj.isReady ) { return; }
} // 文档就绪方法的清理函数 ReadyObj.ready(); };
} else if ( document.attachEvent ) { DOMContentLoaded = function() { // 至少确保 body 存在,以防 IE 变得有点过分热心(ticket #5443)。if ( document.readyState === "complete" ) { document.detachEvent( "onreadystatechange", DOMContentLoaded ); ReadyObj.ready(); } }; } function ready( fn ) { // 附加监听器 ReadyObj.bindReady();
最后,最奇怪但并不总是有效的选项是使用 setTimeout。例子:
setTimout(function() { // 你的脚本 }, 3000);
这些是我遇到的所有选项,但也许不是唯一的选项,因为其他程序员可以想出自己的功能来解决这个问题。
使用哪个选项取决于您:)
他们还忘记了 defer 属性。html书