当前位置: 首页 > 编程笔记 >

jQuery中document与window以及load与ready 区别详解

殷永嘉
2023-03-14
本文向大家介绍jQuery中document与window以及load与ready 区别详解,包括了jQuery中document与window以及load与ready 区别详解的使用技巧和注意事项,需要的朋友参考一下

用过JavaScript的童鞋,应该知道window对象和document对象,也应该听说过load事件和ready事件,小菜当然也知道,而且自认为很了解,直到最近出了问题,才知道事情并不是那么简单。

首先说说window和document,直观上来讲,window代表的是浏览器窗口,而document代表的是浏览器窗口中加载的dom元素,进一步说,document是window的一个属性,window是最顶级的对象。

二者有啥区别呢?很好理解,假设现在有一个浏览器,里边加载的页面特别长,已经超出了一屏,当然,肯定会出现滚动条了,这时候,$(window).height()和$(document).height()是不相等的,document的高度肯定要比window的大,因为window窗口始终就是那么大。见下图:

再说说load事件和ready事件(这里的load和ready是指jQuery的事件,下同)。

先说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,ready事件可以加在任意元素上,比如$(window).ready(fn);、$(document).ready(fn);、$(“div”).ready(fn);等等。

ready事件不要求页面完全加载完,只需要加载完dom结构即可触发。

ready事件可以同时注册多个,执行时,按照注册的先后顺序执行。注意,就算是注册不同元素的ready事件,也是按照先后顺序执行。例如下列代码:


$(window).ready(function(){

  alert("window");

});

$(document).ready(function(){

  alert("document");

});

$("div").ready(function(){

  alert("div");

});

按照常理,应该是div先加载完,所以先执行alert("div");,然后才是alert("document");或alert("window");,但遗憾的是,alert("div");是最后一个执行的。所以,无论是否在同一元素上注册ready事件,都是按照注册的先后顺序执行。

最后一项,ready事件与window.onload(或<body onload=””>)是冲突的,如果使用了window.onload(或<body onload=””>),将导致ready事件不执行。

经过如此多的讨论,最终证明:$(document).ready(fn);兼容性、安全性是最好的,如果有此类需求,尽量采用这种方式。

 类似资料:
  • 问题内容: 我最近遇到了我的JavaScript代码问题,并从我的代码中取出了一部分代码,并将其放在解决该问题的位置。 现在我明白了刚刚解雇后,但它为什么没有准备好后,即后? 问题答案: 当所有资产(包括图像)加载完成时,会调用。当DOM准备进行交互时会触发。 在MDC中, window.onload : 加载事件在文档加载过程结束时触发。此时,文档中的所有对象都在DOM中,并且所有图像和子帧均已

  • 本文向大家介绍document的load 和ready有什么区别?相关面试题,主要包含被问及document的load 和ready有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 并没有 的写法。 只有如下的写法: 分别是dom加载完成, 和 页面资源加载完成(当阻塞资源与非阻塞资源全部加载完才会触发) 显然 window.onload 是比较 要晚触发的。

  • 问题内容: JavaScript和jQuery方法之间有什么区别? 问题答案: 该事件发生在HTML文档已加载之后,而事件随后发生,即所有内容(例如图像)也已加载。 该事件是DOM中的标准事件,而该事件特定于jQuery。该事件的目的是应在文档加载后尽早发生,从而使向页面中的元素添加功能的代码不必等待所有内容加载。

  • 本文向大家介绍jquery $(document).ready()和window.onload的区别浅析,包括了jquery $(document).ready()和window.onload的区别浅析的使用技巧和注意事项,需要的朋友参考一下 Jquery中$(document).ready()的作用类似于传统JavaScript中的window.onload方法,不过与window.onload

  • 问题内容: 题: 如果我链接两个都带有函数的JavaScript文件,会发生什么情况?一个会覆盖另一个吗?还是两者都被叫? 例如, jquery1.js: jquery2.js: 我相信最好的方法是将两个调用简单地合并为一个,但是在我的情况下这不太可能。 问题答案: 所有人都会被执行, 并且在首次调用的基础上运行!! 演示如您所见,它们不会互相替换 我还要提一件事 代替这个 您可以使用此快捷方式

  • 问题内容: 我正在使用jQuery在UpdatePanel中的元素上附加一些鼠标悬停效果。事件绑定在中。例如: 当然,这在第一次加载页面时效果很好,但是当UpdatePanel执行部分页面更新时,它不会运行,并且鼠标悬停效果在UpdatePanel内部不再起作用。 不仅在首页加载时,而且在每次UpdatePanel触发部分页面更新时,建议在jQuery中进行接线的推荐方法是什么?我应该使用ASP.