jQuery的文档处理程序详解


Posted in Javascript onMay 10, 2016

本文实例讲述了jQuery的文档处理程序。分享给大家供大家参考,具体如下:

jQuery文档处理程序

所谓的文档处理程序,是指jQuery中提供的$(document).ready事件,此事件会在dom加载完毕后触发,而window.onlaod和body.onload都是在页面完全加载后触发。

jQuery文档处理程序介绍

在jQuery中想实现在DOM加载完毕后的处理逻辑,只需要使用$(document).ready()事件。此事件函数称为"jQuery文档处理程序"。

可以在页面的任何位置,甚至是外部的js文件中,编写如下列语句:

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

则在页面的DOM加载完毕后,会立刻执行alert语句。如果页面上有大的图片、js文件等外部资源需要加载,jQuery的文档处理程序会在其之前执行,而window.onload和boyd.onload是在所有的资源文件加载完毕后执行的。

Ready()函数时jQuery"事件函数"中提供的一个jQuery对象函数,签名位ready(fn)。

fn是ready事件发生时执行的函数。

因为是jQuery对象函数,意味着可以在任何jQuery对象上调用:

$("body").ready(function (){ alert("body.ready")});

上面的语句等同于:

$(document).ready(function (){alert("body.ready")});

虽然ready()函数可以作用在任何jQuery对象上,但是使用时一定要注意对象是否具有ready事件。

也可以使用"$(fn)"这种简化的形式:

$(function (){….})
//等效于$(document).ready(function(){…});

同jQuery中所有的事件对象一样,$(document).ready事件,会按照出现的先后顺序执行。

比如,可以调用两次$(document).ready事件:

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

则在DOM加载完毕后,首先输出"document.ready-1",然后输出"document.ready-2"。如果使用传统的:

Window.onload=function(){…..};

上面的代码会将window.onload原有的事件处理掉,然后绑定新的事件。

jQuery文档处理程序的优势

如果脚本需要在页面加载时执行,那么大部分的脚本都可以放在$(document).ready()事件中。

在举例jQuery文档处理程序的优势之前,先看一个常见的JavaScript编程错误:dom未加载完成即改变dom模型。

在传统的javascript编程中。有时会在页面的头部或者底部直接插入script模块并编写代码,比如下面的例子:

<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML 1.0 
Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>jQueryStorm ? 常见错误编程方式举例</title>
  <scriptlanguage="javascript"type="text/javascript"src="../include/jquery-1.7.1.js"></script>
</head>
<body>
<!-- 页面内容部分 ?>
<div id="divMsg" style="border:solid 1px#000000;padding:20px;"></div>
<!-- 尾部模块 -->
<script language="javascript" type="text/javascript">
  //这条语句在某些情况下会导致错误
  Document.getElementById("divMsg").innerHTML="<divstyle=\"border:solid 2px #FF0000\">动态添加的图层</div>";
</script>
</boyd>
</html>

此例子在所有的浏览器都运行良好,但是存在隐患。因为在页面加载时,就在divMsg容器中添加了一个新的div对象,也就是添加了一个dom对象,当网速变慢或者页面很大需要一定的加载时间,会出现"中止操作"的错误。

这个错误甚至曾经在Google首页、淘宝等知名网站上都出现过,因为此错误很难在测试时候发现。

所以做web开发是要记住一条真理:永远不要再dom加载时修改dom结构。

如果需要在页面加载时修改dom结构,原始的做法是通过window.onload和body.onload事件实现,比如针对上面的错误例子,可以修改为:

<script type="text/javascript">
Window.onload=function()
{
  Document.getElementById("divMsg").innerHTML="<divstyle="\border:solid 2px #FF0000\">动态添加的图层</div>";
};
</script>

具体的实现方式还有很多,应用window.onload和body.onload是因为这两个事件都是在dom加载完成并且所有页面资源加载完成后才执行的,这是最简单的做法。或者根据"document.readyState"判断dom的状态,如果是"complete"则进行某些操作,jQuery的文档处理程序$(document).ready内部正是使用的此原理。

希望本文所述对大家jquery程序设计有所帮助。

Javascript 相关文章推荐
[原创]js获取数组任意个不重复的随机数组元素
Mar 15 Javascript
分享27款非常棒的jQuery 表单插件
Mar 28 Javascript
jquery select 设置默认选中的示例代码
Feb 07 Javascript
返回顶部按钮响应滚动且动态显示与隐藏
Oct 14 Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
Jun 18 Javascript
浅析Bootstrap组件之面板组件
May 04 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
Sep 30 Javascript
微信小程序自定义导航教程(兼容各种手机)
Dec 12 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
Apr 28 Javascript
微信小程序实现吸顶效果
Jan 08 Javascript
Paypal支付不完全指北
Jun 04 Javascript
VUE实现吸底按钮
Mar 04 Vue.js
有关easyui-layout中的收缩层无法显示标题的解决办法
May 10 #Javascript
jQuery对象与DOM对象转换方法详解
May 10 #Javascript
jQuery对象的链式操作用法分析
May 10 #Javascript
JS组件Bootstrap按钮组与下拉按钮详解
May 10 #Javascript
Bootstrap按钮下拉菜单组件详解
May 10 #Javascript
JavaScript编写页面半透明遮罩效果的简单示例
May 09 #Javascript
JavaScript编写点击查看大图的页面半透明遮罩层效果实例
May 09 #Javascript
You might like
深入解析yii权限分级式访问控制的实现(非RBAC法)
2013/06/13 PHP
九个你必须知道而且又很好用的php函数和特点
2013/08/08 PHP
php模拟post上传图片实现代码
2016/06/24 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
2017/08/02 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
在IE下:float属性会影响offsetTop的取值
2006/12/22 Javascript
javascript面向对象的方式实现的弹出层效果代码
2010/01/28 Javascript
js中关于String对象的replace使用详解
2011/05/24 Javascript
JS分页控件 可用于无刷新分页
2013/07/23 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
使用js画图之正弦曲线
2015/01/12 Javascript
使用Raygun对Node.js应用进行错误处理的方法
2015/06/23 Javascript
JavaScript鼠标特效大全
2016/09/13 Javascript
Vue.js第三天学习笔记(计算属性computed)
2016/12/01 Javascript
JavaScript 用fetch 实现异步下载文件功能
2017/07/21 Javascript
微信禁止下拉查看URL的处理方法
2017/09/28 Javascript
vue项目国际化vue-i18n的安装使用教程
2018/03/14 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
2018/11/21 Javascript
详解react阻止无效重渲染的多种方式
2018/12/11 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
[03:01]2014DOTA2国际邀请赛 DC:我是核弹粉,为Burning和国土祝福
2014/07/13 DOTA
Python操作MySQL数据库的三种方法总结
2018/01/30 Python
数据清洗--DataFrame中的空值处理方法
2018/07/03 Python
Python实现基于C/S架构的聊天室功能详解
2018/07/07 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
2019/01/15 Python
python实现列表的排序方法分享
2019/07/01 Python
Linux下通过python获取本机ip方法示例
2019/09/06 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
2020/05/11 Python
Pycharm Git 设置方法
2020/09/15 Python
CSS3按钮鼠标悬浮实现光圈效果源码
2016/09/11 HTML / CSS
荷兰在线体育用品商店:Avantisport.nl
2018/07/04 全球购物
广告词串烧
2014/03/19 职场文书
本科毕业自我鉴定
2014/03/20 职场文书
婚前财产协议书范本
2014/10/19 职场文书
教师节寄语2015
2015/03/23 职场文书
刑事上诉状范文
2015/05/22 职场文书