DOM加载过程中ready和load的区别
在浏览器地址栏输入URL地址,浏览器开始加载页面时,有以下几个过程
1、浏览器开始解析HTML文档
2、 浏览器遇到HTML文档中的<script>元素以及CSS样式文件,并且没有async或defer属性,就暂停解析,开始执行脚本和CSS样式
3、 HTML文档解析完成
4、 浏览器等待图片、样式表、字体文件等外部资源加载完成
在这其中,有两个阶段:
ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件);
load,表示页面包含图片等外部文件在内的所有元素都加载完成。
DOM Ready
严格来说,ready并不是DOM中的事件,只是因为在jQuery中,有ready()方法,它在页面HTML文档解析完成但图片等媒体文件加载完成之前执行。
使用jQuery插件一般都这么写
$(function(){
//do something
alert('something finished!')
});
其实这个就是jQuery ready()的简写,他等价于
$(document).ready(function(){
//do something
alert('something finished!')
})
这个jQuery ready()的方法就是DOM Ready ,他的作用就是,在DOM加载完成后,图片等外部文件加载之前,就可以对DOM进行操作。
在不使用jQuery的情况下,可以使用DOMContentLoaded事件可以判断DOM的ready状态。
document.addEventListener('DOMContentLoaded', function () {
//do something
alert('something finished!')
});
它表示在document节点上监听DOMContentLoaded事件,一旦document中的DOM完成加载就触发此事件。
IE8不支持DOMContentLoaded事件,因此在较低版本的浏览器中,可以使用 readystatechange事件,效果是一样的。
document.onreadystatechange = function () {
if (document.readyState == "interactive") {
//do something
alert('something finished!')
}}
其中,document.readyState属性返回当前文档的状态,共有三种可能的值。
- loading:加载HTML代码阶段(尚未完成解析)
- interactive:加载外部资源阶段时
- complete:加载完成时
Dom Load
DOM在完全加载完成之后会触发load事件,此时如果想做点事情的话,可以这么写
window.onload=function(){
//do something
alert('something finished!')
}
注意,不要写成document.onload,因为在大多数浏览器中,在document上监听load事件是无效的,应当在window上监听。
使用jQuery的写法
$(window).load(function(){
//do something
alert('something finished!')
})
这就是Dom Load,他的作用就是,在DOM以及其中的图片等其他外部文件全部加载完毕之后触发。
考虑一下下面的代码在执行时,会先弹出哪个窗口。
<script>
window.onload=function(){
alert('load finished!')
}
document.addEventListener('DOMContentLoaded',function(){
alert('ready finished!')
})
</script>
<body>
<h1>这是一个 JavaScript 测试程序</h1>
</body>
参考:
https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onload
https://www.w3.org/TR/html5/syntax.html#the-end
JavaScript标准参考教程http://javascript.ruanyifeng.com/dom/document.html
DOM加载过程中ready和load的区别的更多相关文章
- DOM加载过程
静态的dom 动态的dom http://blog.csdn.net/cxiaokai/article/details/7552653 一:预编译 解释 js加 ...
- css3实现loading效果--当页面加载过程中显示Loading的进度条,全部加载完成之后进度条消失
一个页面等图片资源全部加载完成,会需要很长时间,用户体验会很差,所以我们需要loading来掩盖这个漫长的过程! emmm,定时器?写个定时器还要清除,万一造成内存泄露?定时器之间还会互相影响,呼呼呼 ...
- iOS学习之视图加载过程中会触发的方法(loadView/viewDidLoad/didReceiveMemoryWarning)
1.loadView 这是视图控制器用来加载根视图的方法; 如果需要将自定义的视图作为根视图,则不需要调用父类对该方法的实现([super loadView]);直接将自定义视图通过self.view ...
- spring加载过程中jar包加载不了,解决方法
当我们在开发spring项目时,一般会将jar包放到webInf/lib下,这样是myeclipse自动将jar包加载到tomcat中webapps下,但是当我们新建一个lib文件夹的情况下,我们ad ...
- WPF 大数据加载过程中的等待效果——圆圈转动
大家肯定遇到过或将要遇到加载大数据的时候,如果出现长时间的空白等待,一般人的概念会是:难道卡死了? 作为一个懂技术的挨踢技术,即使你明知道数据量太大正在加载,但是假如看不到任何动静,自己觉得还是一种很 ...
- 在程序加载过程中显示ProgressDialog 对话框
private ProgressDialog mProgressDlg = null; @Override protected void onCreate(Bundle savedInstanceSt ...
- jQuery中ready和load的区别
<span style="white-space:pre"> </span>//document ready $(document).read ...
- 输入 URL 到页面完成加载过程中的所有发生的事情?
转到浏览器中输入URL给你一个页面后,.有些事情,你每天都在使用,学的是计算机网络知道是怎么回事.DNS解析然后页面的回馈,只是要讲好还是有难度. 之前fex团队的nwind专门写过这个问题的博客: ...
- linux 内核驱动加载过程中 向文件系统中的文件进行读写操作
utils.h 文件: #ifndef __UTILS_H__ #define __UTILS_H__ void a2f(const char *s, ...); #endif utils.c 文件: ...
随机推荐
- 安卓客户端a标签长按弹框提示解决办法
昨天工作时候发现一个bug,是关于a标签的,在安卓客户端中,如果是a标签的话,长按会出现一个弹框,如图所示 是因为安卓客户端的长按触发机制,以后进行wap端开发的时候,如果用到跳转页面尽量不要用a标签 ...
- SVN的使用
- Win7安装MySQL-5.7.16过程
1.在C盘新建MYSQL文件夹:2.将mysql-5.7.16-winx64拷贝到C:\MYSQL文件夹下,更名为mysql-5.7.16:3.在mysql-5.7.16目录下,建my.ini文件,内 ...
- Linux 入门之网络配置
查看网络状态 ifconfig 修改网络参数 实验环境centos6.5,其他系统自行百度 ls /etc/sysconfig/network-scripts 显示所有文件, vi /etc/sysc ...
- 【repost】JS中的异常处理方法分享
我们在编写js过程中,难免会遇到一些代码错误问题,需要找出来,有些时候怕因为js问题导致用户体验差,这里给出一些解决方法 js容错语句,就是js出错也不提示错误(防止浏览器右下角有个黄色的三角符号,要 ...
- 执行git push出现"Everything up-to-date"
在github上git clone一个项目,在里面创建一个目录,然后git push的时候,出现报错"Everything up-to-date" 原因:1)没有git add . ...
- 在Redhat上为.Net 项目构建基于Jenkins + Github + Mono 的持续集成环境
在Redhat enterprise 6.5 的服务器上,为在gutub 上的 .net 项目构建一个持续集成环境,用到了Jenkins和mono.因公司的服务器在内网,访问外网时要通过代理,所以在很 ...
- js中几种实用的跨域方法原理详解(转)
今天研究js跨域问题的时候发现一篇好博,非常详细地讲解了js几种跨域方法的原理,特分享一下. 原博地址:http://www.cnblogs.com/2050/p/3191744.html 下面正文开 ...
- ABP源码分析四十四:ZERO的配置
ABP Zero模块中需要配置的地方主要集中在三块:配置静态的role,配置外部认证源,以及配置本地化语言和资源. UserManagementConfig/IUserManagementConfig ...
- ABP框架 - 多租户
文档目录 本节内容: 什么是多租户 多部署 - 多数据库 单部署 - 多数据库 单部署 - 单数据库 单部署 - 混数据库 多部署 - 单/多/混 数据库 ABP中的多租户 启用多租户 宿主与租户 会 ...