100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > jquery $(document).ready()与window.onload的区别

jquery $(document).ready()与window.onload的区别

时间:2022-10-30 00:18:27

相关推荐

jquery $(document).ready()与window.onload的区别

jQuery中$(document).ready()的作用类似于传统JavaScript中的window.onload方法,不过与window.onload方法还是有区别的。

1.执行时间

window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行。

$(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕。

2.编写个数不同

window.onload不能同时编写多个,如果有多个window.onload方法,只会执行一个

$(document).ready()可以同时编写多个,并且都可以得到执行

3.简化写法

window.onload没有简化写法

$(document).ready(function(){})可以简写成$(function(){});

以浏览器装载文档为例,在页面加载完毕后,浏览器会通过 Javascript 为 DOM 元素添加事件。在常规的 Javascript 代码中,通常使用 window.onload 方法,而在jQuery中,使用的是$(document).ready() 方法,极大的提高Web应用程序的速度。

另外,需要注意一点,由于在 $(document).ready() 方法内注册的事件,只要 DOM 就绪就会被执行,因此可能此时元素的关联文件未下载完。例如与图片有关的 html 下载完毕,并且已经解析为 DOM 树了,但很有可能图片还没有加载完毕,所以例如图片的高度和宽度这样的属性此时不一定有效。要解决这个问题,可以使用 Jquery 中另一个关于页面加载的方法 ---load()方法。 Load()方法会在元素的onload 事件中绑定一个处理函数。如果处理函数绑定给 window 对象,则会在所有内容(包括窗口、框架、对象和图像等)加载完毕后触发,如果处理函数绑定在元素上,则会在元素的内容加载完毕后触发。

jQuery 代码如下:

$(window).load(function (){// 编写代码 });

//等价于 JavaScript 中的以下代码

Window.onload = function (){// 编写代码}

MSDN 关于 JScript 的一个方法有段不起眼的话,当页面 DOM 未加载完成时,调用 doScroll 方法时,会产生异常。那么我们反过来用,如果不异常,那么就是页面DOM加载完毕了!

Diego Perini 在 年的时候,报告了一种检测 IE 是否加载完成的方式,使用 doScroll 方法调用。

原理是对于 IE 在非 iframe 内时,只有不断地通过能否执行 doScroll 判断 DOM 是否加载完毕。在本例中每间隔 50 毫秒尝试去执行 doScroll,注意,由于页面没有加载完成的时候,调用 doScroll 会导致异常,所以使用了 try -catch 来捕获异常。

jQuery之前版本语句(如jquery-1.4.3):

ready: function( fn ) {//Attach the listenersjQuery.bindReady();// If the DOM is already readyif ( jQuery.isReady ) {// Execute the function immediatelyfn.call( document, jQuery );// Otherwise, remember the function for later} else if ( readyList ) {// Add the function to the wait listreadyList.push( fn );}return this;},bindReady: function() {if ( readyBound ) {return;}readyBound = true;// Catch cases where $(document).ready() is called after the// browser event has already occurred.if ( document.readyState === "complete" ) {// Handle it asynchronously to allow scripts the opportunity to delay readyreturn setTimeout( jQuery.ready, 1 );}// Mozilla, Opera and webkit nightlies currently support this eventif ( document.addEventListener ) {// Use the handy event callbackdocument.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );// A fallback to window.onload, that will always workwindow.addEventListener( "load", jQuery.ready, false );// If IE event model is used} else if ( document.attachEvent ) {// ensure firing before onload,// maybe late but safe also for iframesdocument.attachEvent("onreadystatechange", DOMContentLoaded);// A fallback to window.onload, that will always workwindow.attachEvent( "onload", jQuery.ready );// If IE and not a frame// continually check to see if the document is readyvar toplevel = false;try {toplevel = window.frameElement == null;} catch(e) {}if ( document.documentElement.doScroll && toplevel ) {doScrollCheck();}}},

4.原生JavaScript实现jQuery的ready()方法

请注意,如果事件已经被触发,回调将不会被执行。为了确保回调总是运行,jQuery检查文档(reference)的“readyState” 属性,如果属性值变为complete或者interactive,则立即执行回调函数。关于readystatechange事件请参考:事件

var callback = function(){// Handler when the DOM is fully loaded};if (document.readyState === "interactive" || document.readyState === "complete" || (document.readyState !== "loading" && !document.documentElement.doScroll)) {callback();} else {document.addEventListener("DOMContentLoaded", callback);}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。