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

时间: 2024-08-06 07:55:40

DOM加载过程中ready和load的区别的相关文章

DOM加载过程

静态的dom 动态的dom http://blog.csdn.net/cxiaokai/article/details/7552653 一:预编译   解释 js加载过程中,会先将变量和函数预编译 预编译期  变量赋值undefined 当JavaScript引擎解析脚本时,它会在预编译期对所有声明的变量和函数进行处理. 做如下处理: 1. 在执行前会进行类似"预编译"的操作:首先会创建一个当前执行环境下的 活动对象,并将那些用var申明的变量设置为活动对象的属性,但是此时这些变量的赋

百度地图 在加载过程中,根据回调函数结果中第一个点设置为中心点

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.4"></script&g

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

当我们在开发spring项目时,一般会将jar包放到webInf/lib下,这样是myeclipse自动将jar包加载到tomcat中webapps下,但是当我们新建一个lib文件夹的情况下,我们add building Path时就会出错,这时候我们有个技巧供使用. 1.项目上点击右键搜索de,找到deployment assembly 目的就是将此处添加的jar包添加到系统webINF/lib路径下 来自为知笔记(Wiz) spring加载过程中jar包加载不了,解决方法

JQuery源码解析-Dom加载过程

下面的几个工具方法都是和dom加载有关,所以先从dom加载开始. 用到的方法: isReady:DOM是否已经加载完(内部使用) readyWait():等待多少文件的计时器(内部使用) holdReady()::推迟DOM触发 ready():准备DOM触发 jQuery.ready.promise = function( obj ) {}检测dom的异步操作 先看一下jQuery和原生js加载方式有什么不同: $(function () { }); window.onload = funct

链接与加载过程中,几个关键的概念

http://www.cnblogs.com/qiaoconglovelife/p/5870000.html 加载(load) 将程序拷贝到存储器并运行的过程,由加载器(loader)执行. 链接分类 编译时(compile time)链接:也称为传统静态链接.静态链接: 加载时(load time)链接:在程序被加载的时候动态链接共享库: 运行时(run time)链接:在程序运行时根据需要动态链接共享库. 目标文件 可重定位目标文件:可被链接生成可执行目标文件: 可执行目标文件:可被直接拷贝

视图加载过程中会触发的方法(loadView/viewDidLoad/didReceiveMemoryWarning)

1.loadView 这是视图控制器用来加载根视图的方法; 如果需要将自定义的视图作为根视图,则不需要调用父类对该方法的实现([super loadView]);直接将自定义视图通过self.view定义为视图控制器的根视图; 自定义视图中的简单响应事件也应由视图控制器来进行处理,写在此方法内; 2.viewDIdLoad 当视图控制器的根视图加载完成之后触发该方法;(也就是loadView调用完成之后会立即调用该方法); 需要调用父类对该方法的实现; 该方法可以对根视图进行简单的一些设置,比如

ajax数据加载过程中进行数据加载提示

方法1:$(function(){ $.get("URL", function(Msg){ $("你要显示提示的地方").html("数据正在加载中.."); $("你要显示查询数据的地方").html(Msg); }); }); 方法2: <html><head> <title></title></head><body><input type=&q

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

转到浏览器中输入URL给你一个页面后,.有些事情,你每天都在使用,学的是计算机网络知道是怎么回事.DNS解析然后页面的回馈,只是要讲好还是有难度. 之前fex团队的nwind专门写过这个问题的博客: http://fex.baidu.com/blog/2014/05/what-happen/ 厉害的地方是将整个计算机体系和硬件都涉及进来,非常广非常深,太强大了. 然后找到一个StackOverFlow的答案: what happens when you type in a URL in brow

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

本文是转载的,有两种方式实现等待效果,一种是纯前台技术,一种是后台技术.个人更倾向于使用后台技术,主要是后台技术可以实现代码重用. 地址:http://blog.csdn.net/qqamoon/article/details/7001693:http://www.cnblogs.com/jying/p/3230391.html