[转]JQ中$(window).load和$(document).ready区别与执行顺序
一、$(window).load()、window.onload=function(){}和$(document).ready()方法的区别
1、$(window).load() 和window.onload=function(){}
是页面中的所有元素(包括图片、flash)等都加载完毕后,才能执行;
$(document).ready() 是页面中的DOM元素加载完成后便可执行。
2、$(window).load()和window.onload=function(){}
不同的是,前者可以和$(document).ready()一样,可以同时加载多个函数。
二、window和document的区别
1、window代表的是浏览器窗口,即可视的浏览器窗口
document代表的是整个页面的dom元素
即document只是window的一个属性;
2、两者的区别在页面有滚动条时可以直观的显示出来,当出现滚动条时,$(window).height和$(document).height是不相等的,$(document).height比$(window).height大,因为window的高度始终都是可见的浏览器窗口的高度,而document的高度则是整个页面的dom元素的高度,即超出一屏幕了。
图片借用地址http://www.jb51.net/article/59154.htm
三、$(window).load()方法的使用场景
1、当某一触发事件,需要页面的所有元素都加载完毕后才执行,并且元素不是通过ajax回调填充的情况下,使用$(window).load()即可。
2、当某一触发事件,需要页面的所有元素都加载完毕后才执行,并且元素是通过ajax回调填充的情况下,使用$(window).load()会出现有时有效,有时无效的情况。
因为回调的html元素的加载完成可能在$(window).load()执行之后。
load事件主要就是用来代替原生的window.onload,它只能用在两个场景下:
· window对象上。比如$(window).load(fn);。
· 带有URL的元素(images, scripts, frames, iframes)。比如$(“img”).load(fn);。
除此之外,任何元素都没有load事件,比如:$(document).load(fn);这是错误的写法,根本不会执行。
load事件需要页面完全加载完成才可以触发,所谓的完全加载完,不仅仅是dom结构加载完,还需要所有的链接引用都加载完才可以。比如页面中有大量图片,必须等每一个图片都加载完成,才叫完全加载完。
最重要的还没说,jQuery官方文档明确说明load事件的跨浏览器兼容性很差(It doesn't work consistently nor reliably cross-browser)。经过小菜测试,谷歌浏览器仅仅支持$(window).load(fn);,而火狐浏览器支持$(window).load(fn);和$(“img”).load(fn);。
所以,除非必要情况下,否则强烈不推荐使用load事件。
而ready事件可以加在任意元素上,比如$(window).ready(fn);、$(document).ready(fn);、$(“div”).ready(fn);等等。
ready事件不要求页面完全加载完,只需要加载完dom结构即可触发。
JQ中的$(document).ready()大家应该用的非常多,基本每个JS脚本中都有这个函数的出现有时甚至会出现多个,那么另一个加载函数$(window).load相对出现的次数就很少了,下面为大家介绍一下两者的区别与他们的执行顺序
一般情况下一个页面响应加载的基本顺序是:域名解析 -> 加载html -> 加载js和css -> 加载图片等其他信息。
那么我们在编写JS脚本时什么情况下使用$(document).ready()又在什么情况下使用$(window).load呢,我们先来了解一下两者的功能
一、$(document).ready()
从字面的意思上理解,就是文档准备好了。也就是浏览器已经加载并解析完整个html文档,dom树已经建立起来了,然后执行此函数
原生JavaScript中的写法如下:
document.ready=function(){
alert("ready");
}
jQuery中的写法如下:
$(document).ready(function(){
alert("ready");
});
或
$(function(){
alert("ready");
});
二、$(window).load
在网页中所有元素(包括页面中图片,css文件等所有关联文件)完全加载到浏览器后才执行
原生JavaScript中的写法如下:
window.onload = function(){
alert("onload");
};
jQuery中的写法如下:
$(window).load(function(){
alert("onload");
});
两者的区别在于:
1.执行时间不同
$(document).ready()是在页面完成HTML的加载并建立了DOM树之后就开始执行,但这并不代表页面的所
有数据已经全部加载完成,一些大的图片有会在建立DOM树之后很长一段时间才行加载完成,而
$(window).load()就是整个页面已经加载完毕后才执行,包括图片等一些关联文件。
2.可以被执行的次数不同
$(document).ready()可以在JavaScript代码中出现多次,并且里面的函数或者代码都可以执行;而$(window).load()只能在JavaScript代码中出现一次,如果有多个$(window).load(),那么只有最后一个$(window).load()里面的函数或者代码才会执行,之前的$(window).load()都将被覆盖;
3.执行的效率不同
如要在dom的元素节点中添加onclick属性节点,这时用$(document).ready()就要比用$(window).load()的效率高;但是在某些时候还必须得用$(window).load()才行
总结一下就是:$(window).load()在$(document).ready之后执行,且页面中所有内容全部加载完成后才会执行,两者的使用时机一目了然,大家可以自行决定。
[转]JQ中$(window).load和$(document).ready区别与执行顺序的更多相关文章
- JQ中$(window).load和$(document).ready区别与执行顺序
JQ中的$(document).ready()大家应该用的非常多,等同于$(function(){}),基本每个JS脚本中都有这个函数的出现有时甚至会出现多个,那么另一个加载函数$(window).l ...
- window.load 和$(document).ready() 区别
1.执行时间 window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行. $(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕.2.编写个数不同 w ...
- $(window).load()和$(document).ready()
一.前言 我们在编写前端代码的js文件时,往往是会先写一个$(function(){}),然后才会在大括号里面继续写我们自己的代码.当时并不能理解为什么要添加这样一个东西,只是把它当做一个标签一样添加 ...
- $(window).load与$(document).ready的区别
刚好今天学了用jQuery实现瀑布流的用法,但加载时发现了一个小小的问题,那就是分别用$(window).load与$(document).ready实现加载时,$(document).ready的布 ...
- window.onload()与$(document).ready()区别
浏览器加载完DOM后,会通过javascript为DOM元素添加事件,在javascript中,通常使用window.onload()方法. 在jquery中,则使用$(document).ready ...
- window.onload与$(document).ready()区别
2013-12-08 17:11:34 window.onload一次只能执行一个程序,而$(document).ready()可以按照先后顺序执行多个程序. eg: function one(){ ...
- jq方法中 $(window).load() 与 $(document).ready() 的区别
通过自学进入了前端的行列,只知道在js中,一开头就写一个: window.onload = function(){ //doing sth} 然后所有的乱七八糟的代码全塞里面,大概知道window.o ...
- jQuery中的$(window).load()与$(document).ready()以及jquery $(document).ready() 与window.onload的区别
大多数jQuery实例或教程都告诉我们绑定我们的jQuery代码到$(document).ready事件.虽然$(document).ready 事件在大多数情况下都OK,但是它的解析顺序是在文档准备 ...
- window.load 和$(document).ready() 、window.load和body onload区别
1.执行时间 window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行. $(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕.2.编写个数不同 w ...
随机推荐
- Xml日志记录文件最优方案(附源代码)
Xml作为数据存储的一种方式,当数据非常大的时候,我们将碰到很多Xml处理的问题.通常,我们对Xml文件进行编辑的最直接的方式是将xml文件加载到XmlDocument,在内存中来对XmlDocume ...
- IE版本的标准定义
解决方案 首页加代码把IE浏览器的标准改了,无论客户用的什么IE,都是按照IE7的标准来的. <meta http-equiv="X-UA-Compatible" conte ...
- Day3-Python基础3---函数介绍
一.函数基本语法及特性 函数是什么? 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫做sub ...
- 刷题常用的STL容器总结
本文归纳总结刷题常用到STL容器以及一些标准算法,主要包括: string.vector.map.pair.unordered_map.set.queue.priority_queue.stack,以 ...
- C# IL中间代码注入实现切面编程
背景及现状:之前分享的那篇“面向切面编程–渲染监控日志记录方案”中提供了利用RealProxy作为代理类来生成代理的面向切面的编程方法,那个方法可以实现面向切面编程进行日志记录,现在渲染主程序也是采用 ...
- Rails通过页面Debug
<%= debug(headers) %>--在视图中显示伴随请求的头部信息 <%= debug(params) %>--在视图中显示请求中的参数 <%= debug(a ...
- 生产者与消费者--demo1---bai
import java.util.ArrayList; import java.util.List; import java.util.Random; //自定义类,描述仓库 public class ...
- Class python31
# class Teacher: # def __init__(self, name, age, sex, salary, level): # self.name = name # self.age ...
- HDLM工具介绍
HDLM提供了以下一些工具,以方便HDLM多路径管理. 1. dlmgetras hdlm信息收集工具,用来收集hdlm相关的各种日志.trace.配置等文件,以方便进行hdlm故障分析. 命令格式 ...
- dtgrid 手动条件删除表格中的某一行
dtgrid 手动条件删除表格中的某一行 var grid = $.fn.DtGrid.init(dtGridOption); $(function () { grid.load(); }); fun ...