• [转]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相对出现的次数就很少了,下面为大家介绍一下两者的区别与他们的执行顺序
     

    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之后执行,且页面中所有内容全部加载完成后才会执行,两者的使用时机一目了然,大家可以自行决定。

  • 相关阅读:
    uva10152-ShellSort
    WCF问题集锦:ReadResponse failed: The server did not return a complete response for this request.
    Android动态改变布局
    Android应用性能优化
    玩转CPU之直线
    [DB][MySql]关于取得自增字段的值、及@@IDENTITY 与并发性问题
    js对象实例化的常见三种方式
    TCP协议
    [UnityUI]循环滑动列表
    Spring MVC原理及实例基础扫盲篇
  • 原文地址:https://www.cnblogs.com/JaniceDong/p/9001159.html
Copyright © 2020-2023  润新知