在浏览器地址栏输入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的区别的更多相关文章

  1. DOM加载过程

    静态的dom   动态的dom             http://blog.csdn.net/cxiaokai/article/details/7552653     一:预编译   解释 js加 ...

  2. css3实现loading效果--当页面加载过程中显示Loading的进度条,全部加载完成之后进度条消失

    一个页面等图片资源全部加载完成,会需要很长时间,用户体验会很差,所以我们需要loading来掩盖这个漫长的过程! emmm,定时器?写个定时器还要清除,万一造成内存泄露?定时器之间还会互相影响,呼呼呼 ...

  3. iOS学习之视图加载过程中会触发的方法(loadView/viewDidLoad/didReceiveMemoryWarning)

    1.loadView 这是视图控制器用来加载根视图的方法; 如果需要将自定义的视图作为根视图,则不需要调用父类对该方法的实现([super loadView]);直接将自定义视图通过self.view ...

  4. spring加载过程中jar包加载不了,解决方法

    当我们在开发spring项目时,一般会将jar包放到webInf/lib下,这样是myeclipse自动将jar包加载到tomcat中webapps下,但是当我们新建一个lib文件夹的情况下,我们ad ...

  5. WPF 大数据加载过程中的等待效果——圆圈转动

    大家肯定遇到过或将要遇到加载大数据的时候,如果出现长时间的空白等待,一般人的概念会是:难道卡死了? 作为一个懂技术的挨踢技术,即使你明知道数据量太大正在加载,但是假如看不到任何动静,自己觉得还是一种很 ...

  6. 在程序加载过程中显示ProgressDialog 对话框

    private ProgressDialog mProgressDlg = null; @Override protected void onCreate(Bundle savedInstanceSt ...

  7. jQuery中ready和load的区别

    <span style="white-space:pre">        </span>//document ready $(document).read ...

  8. 输入 URL 到页面完成加载过程中的所有发生的事情?

    转到浏览器中输入URL给你一个页面后,.有些事情,你每天都在使用,学的是计算机网络知道是怎么回事.DNS解析然后页面的回馈,只是要讲好还是有难度. 之前fex团队的nwind专门写过这个问题的博客: ...

  9. linux 内核驱动加载过程中 向文件系统中的文件进行读写操作

    utils.h 文件: #ifndef __UTILS_H__ #define __UTILS_H__ void a2f(const char *s, ...); #endif utils.c 文件: ...

随机推荐

  1. 安卓客户端a标签长按弹框提示解决办法

    昨天工作时候发现一个bug,是关于a标签的,在安卓客户端中,如果是a标签的话,长按会出现一个弹框,如图所示 是因为安卓客户端的长按触发机制,以后进行wap端开发的时候,如果用到跳转页面尽量不要用a标签 ...

  2. SVN的使用

  3. 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文件,内 ...

  4. Linux 入门之网络配置

    查看网络状态 ifconfig 修改网络参数 实验环境centos6.5,其他系统自行百度 ls /etc/sysconfig/network-scripts 显示所有文件, vi /etc/sysc ...

  5. 【repost】JS中的异常处理方法分享

    我们在编写js过程中,难免会遇到一些代码错误问题,需要找出来,有些时候怕因为js问题导致用户体验差,这里给出一些解决方法 js容错语句,就是js出错也不提示错误(防止浏览器右下角有个黄色的三角符号,要 ...

  6. 执行git push出现"Everything up-to-date"

    在github上git clone一个项目,在里面创建一个目录,然后git push的时候,出现报错"Everything up-to-date" 原因:1)没有git add . ...

  7. 在Redhat上为.Net 项目构建基于Jenkins + Github + Mono 的持续集成环境

    在Redhat enterprise 6.5 的服务器上,为在gutub 上的 .net 项目构建一个持续集成环境,用到了Jenkins和mono.因公司的服务器在内网,访问外网时要通过代理,所以在很 ...

  8. js中几种实用的跨域方法原理详解(转)

    今天研究js跨域问题的时候发现一篇好博,非常详细地讲解了js几种跨域方法的原理,特分享一下. 原博地址:http://www.cnblogs.com/2050/p/3191744.html 下面正文开 ...

  9. ABP源码分析四十四:ZERO的配置

    ABP Zero模块中需要配置的地方主要集中在三块:配置静态的role,配置外部认证源,以及配置本地化语言和资源. UserManagementConfig/IUserManagementConfig ...

  10. ABP框架 - 多租户

    文档目录 本节内容: 什么是多租户 多部署 - 多数据库 单部署 - 多数据库 单部署 - 单数据库 单部署 - 混数据库 多部署 - 单/多/混 数据库 ABP中的多租户 启用多租户 宿主与租户 会 ...