平时在使用JS或者Jquery过程中,通常都会遇到ready、load这些加载,特别是和其他项目人员整合代码过程中,用于用的不一,导致很多不必要的错误出现,现在主要整理出来JQuery的ready、JS的load、JQuery的load这些的区别和注意点,以便后面参考,会不断更新,希望大家指正。
JQuery的ready函数与JS的load的区别
总体来说,window.onload必须等到页面包括图片的所有元素加载完毕后才能执行,$(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕。ready()执行时间早于onload。
写法
window.onload = function(){}
$(document).ready(function(){})
$(function(){});
个数
onload 不能同时写多个,多个情况下,只会执行最后定义的一个(最后一个会覆盖之前定义的)
ready方法,可以编写多个,并且都会执行(顺序执行)
执行时间
onload必须等到页面包括图片的所有元素加载完毕后才能执行,
ready是DOM结构绘制完毕后就执行,不必等到加载完毕。
JQuery的ready与load的区别
load同js只中的load。
一般推荐使用写法如下:(不推荐使用body.onload())
$(window).load(function(){})
$(ele).load(function(){})
与原生js中执行一个不同,Jquery同时定义多个,顺序执行。
JQuery load与JS的load
执行顺序:
情况一:若先遇到$(window).load(),则会一次性顺序执行完定义的所有$(window).load()事件,再执行window.onload。
情况二:若先遇到window.onload,则执行最后一个定义的window.onload事件,再顺序执行后面的所有$(window).load()事件。
注意
当然,实际使用过程中需要结合具体情况做具体分析选择,下面是开发中遇到过的一些情况,需要注意。
(1)当在一个js里面,定义了onload和ready方法时,两者均有效,ready会先执行,onload后执行。
(2)当需要页面所有东西都加载完毕后再执行想调用的函数的时候,应该使用load()。
(3)在ready里面注册的事件,只要DOM就绪就会执行,此时可能元素的关联文件并未下载完成,比如,img的html已经下载完解析为DOM树,但img还未加载完毕,此时img的width或者height可能就为0。
(4)有些情况下,可能需要DOM元素加载前执行Jquery代码
(function(){
//do something
})(jQuery)
注:详细可参考另一篇文章 理解$(function(){})与(function($){})(jQuery)区别
其他
浏览器渲染顺序:
1、解析html
2、加载解析外部css和style文件
3、解析并执行js脚本代码
4、构造html dom模型(标签加载完毕,标签内部如链接资源、大图未加载完的情况则忽略) (ready)
5、加载图片、video、flash等外部文件
6、页面加载完毕 (load)