mon*_*ist 60 javascript jquery events dom
我刚刚意识到,我缺乏在将页面加载到浏览器中时究竟发生了什么的基本知识.
假设我有这样的结构:
<head>
<script src="jquery.js" type="text/javascript"></script>
<script src="first.js" type="text/javascript"></script>
</head>
<body>
...
<script type="text/javascript" id="middle">
// some more JS here...
</script>
...
<script src="last.js" type="text/javascript"></script>
</body>
Run Code Online (Sandbox Code Playgroud)
以下是我的问题:
发生了什么事情?首先是DOM然后执行JS,反之亦然,还是同步(或者一旦JS文件完成下载,不考虑DOM)?我知道脚本按顺序加载.
哪里$(document).ready()
适合?在Firebug的Net选项卡中,我看到了DOMContentLoaded
事件和load
事件.被$(document).ready()
触发时,DOMContentLoaded
事件触发?找不到任何具体信息(每个人只提到"加载DOM时").
"当DOM加载时"究竟是什么意思?所有HTML/JS都已被浏览器下载和解析?或者只是HTML?
以下方案是否可能:有一个$(document).ready()
调用代码last.js
,但在last.js加载之前运行?它最有可能在哪里(first.js
在内联代码块中)?我该如何防止这种情况?
我想要了解什么时候发生什么以及取决于什么(如果有的话)的大局.
Eev*_*vee 37
Javascript按照看到的方式执行. 通常,浏览器一看到<script>
标签就会停止解析页面,下载并运行脚本,然后继续运行.这就是为什么通常建议将<script>
标签放在底部:因此当浏览器等待脚本下载时,用户没有空白页面.
但是,从Firefox 3.5开始,脚本将在后台下载,同时呈现页面的其余部分.在脚本使用document.write
或类似的现在不常见的事件中,Firefox将根据需要进行备份和重绘.我不认为其他浏览器目前会这样做,但如果它即将发布我不会感到惊讶,并且IE至少支持标记中的一个defer
属性,该属性<script>
将延迟加载脚本直到加载页面之后.
DOMContentLoaded
正是这样:它一加载DOM就会触发.也就是说,只要浏览器解析了所有HTML并在内部创建了它的树.它不会等待图像,CSS等加载.DOM通常需要运行你想要的任何Javascript,所以不必等待其他资源.但是,我相信只有Firefox支持DOMContentLoaded
; 在其他浏览器中,ready()
只会将事件附加到常规旧的onload
.
Javascript保证按照它在HTML中出现的顺序运行,因此在尝试将其附加到事件之前,请确保定义了您的函数.
归档时间: |
|
查看次数: |
40183 次 |
最近记录: |