• JQ中$(window).load和$(document).ready区别与执行顺序


    JQ中的$(document).ready()大家应该用的非常多,等同于$(function(){}),基本每个JS脚本中都有这个函数的出现有时甚至会出现多个,那么另一个加载函数$(window).load相对出现的次数就很少了,下面为大家介绍一下两者的区别与他们的执行顺序.

    JQ中的$(document).ready()大家应该用的非常多,基本每个JS脚本中都有这个函数的出现有时甚至会出现多个,那么另一个加载函数$(window).load相对出现的次数就很少了,下面为大家介绍一下两者的区别与他们的执行顺序

    一般情况下一个页面响应加载的基本顺序是:域名解析 -> 加载html -> 加载js和css -> 加载图片等其他信息
    那么我们在编写JS脚本时什么情况下使用$(document).ready()又在什么情况下使用$(window).load呢,我们先来了解一下两者的功能

     先说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结构即可触发。

    一、$(document).ready()

    从字面的意思上理解,就是文档准备好了。也就是浏览器已经加载并解析完整个html文档,dom树已经建立起来了,然后执行此函数

    原生JavaScript中的写法如下:

    1
    2
    3
    document.ready=function(){
     alert("ready");
    }

    jQuery中的写法如下:

    1
    2
    3
    $(document).ready(function(){
     alert("ready");
    });

    1
    2
    3
    $(function(){
     alert("ready");
    });

    二、$(window).load

    在网页中所有元素(包括页面中图片,css文件等所有关联文件)完全加载到浏览器后才执行

    原生JavaScript中的写法如下:

    1
    2
    3
    window.onload = function(){
     alert("onload");
    };

    jQuery中的写法如下:

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

  • 相关阅读:
    Pycharm的快捷键
    【Python】笔记1:Spyder常用快捷键
    npm常用命令整理
    MVC4 IIS7.5 403.14错误的解决办法
    AO 获取系统自带的工具条
    CentOS 7.3下安装Redis
    CentOS 7.3下安装MySql
    安装sql server 2005时出现“安装汇编”错误的解决办法
    解决IIS下localhost访问需要输入用户名和密码的问题
    不断沟通,反复确认
  • 原文地址:https://www.cnblogs.com/gopark/p/8984302.html
Copyright © 2020-2023  润新知