1.2 在页面DOM加载结束后、整个页面加载结束前执行jQuery/JavaScript代码
问题
目前JavaScript应用均采用不唐突的设计方法,典型的例子是:仅仅在DOM加载完成后就开始Javascript代码。这样做的原因是因为,我们只能在DOM全部加载完成后,才能执行DOM节点遍历、DOM节点维护等操作。为了做到这一点我们就需要找到一种方法来确定客户端(通常情况下就是浏览器)何时将DOM加载完毕(这里的加载完毕仅仅指DOM对象加载完毕,而Web页面的其他对象比如:图片、SWF文件可能尚未加载完成。)如果我们通过window.onload事件来解决这个问题的话就会遇到一个问题:onload事件是在页面全部资源(包括图片、SWF文件等)完全加载结束之后才会被触发。对于大多数互联网冲浪人员来说这种方式需要的时间过长。我们需要的是这样一个事件:它能够在所有的DOM对象加载完毕后立刻触发(而不管其他页面资源是否加载完毕)。
解决方案
jQuery提供ready()方法来解决这个问题,ready方法通常被DOM中的document对象调用。
ready方法具有一个function类型的参数,该参数中的方法会在页面中DOM节点可以被遍历或修改时被立即执行。下面给出了一个简单的例子,该例子中的alert方法会在页面中DOM加载结束但整个页面未加载完成时被调用:
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/JavaScript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/JavaScript">
jQuery(document).ready(function(){//DOM 尚未加载, 必须使用 ready 事件
alert(jQuery('p').text());
});
</script>
</head>
<body>
<p>The DOM is ready!</p>
</body>
</html>
讨论
ready()事件处理方法是jQuery为我们提供的JavaScript核心window.onload事件的替代方法。该方法你可以多次使用。在使用此方法时最好将其放在Web页面中的样式定义及引用之后,这样做的目的是保证在执行ready()事件中的jQuery或JavaScript代码时,所有的元素(element)属性都已经被正确的定义了。
另外jQuery提供了ready事件的缩写方式,下面的代码使用缩写方式重写上面的例子:
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/JavaScript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/JavaScript">
jQuery(function(){ //DOM not loaded, must use ready event
alert(jQuery('p').text());
});
</script>
</head>
<body>
<p>The DOM is ready!</p>
</body>
</html>
在使用ready方法时我们应尽量将其放在<head>标签内,避免将该方法放在<body>标签中。这样做有2点理由:
首先,现代最佳实践已经证明,当JS代码放在页面结束位置时页面加载是最快的。
换句话说,当你将JavaScript代码放在web页面底部时,浏览器会在加载完整个页面后加载JavaScript代码。这是一件好事,因为大多数浏览器在JavaScript引擎将整个页面中的JS代码编译完成前会停止一切其他的加载操作。所以,当你将JavaScript代码写在web页面顶部的时候感觉上会产成一些瓶颈。我意识到,在早期的时候由于一些特殊的原因,将JavaScript代码写到<head>标签中更加简单一些。但是老实说,我从未发现任何一种情况是你非这样做不可的。在我开发过程中,将JavaScript代码写在页面底部遇到的任何问题都可以被轻易的解决并且值得这样优化。
其次,如果加快页面速度时我们的终极目标,而仅仅将代码移到页面底部就可以进一步实现的话,为什么我们还要对实现同样功能而进行更多的封装呢?在更多代码和更少代码之间选择的话,我选择更少的代码。可以使用下面的方式代替使用ready()方法,并且这种方式执行速度比用ready()方法更快。
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p>The DOM is ready!</p>
<script type="text/JavaScript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/JavaScript">
alert(jQuery('p').text());//go for it the DOM is loaded
</script>
</body>
</html>
请注意,我将所有的JavaScript代码移到了<body>标签结束之前。任何使用到的额外的标识都需要移到JavaScript之前。
分享到:
相关推荐
《Packt Publishing ASP.NET jQuery Cookbook(2011)》一书是针对ASP.NET与jQuery集成的专业指南,由Sonal Aneel Allana撰写。本书提供了超过60个实用的食谱,旨在帮助读者深入了解如何将jQuery有效地整合到ASP.NET...
《jQuery Cookbook(第1版)》是一本深受前端开发者欢迎的指南,专注于使用jQuery这个强大的JavaScript库来简化网页交互和DOM操作。这本书的源代码包含了示例代码和书中的实践项目,是学习和理解jQuery核心功能及高级...
### jQuery Cookbook 英文版知识点概述 #### 一、引言 《jQuery Cookbook》是一本由多位jQuery社区专家编写的权威教程,旨在帮助读者快速掌握并深入理解jQuery这一流行的JavaScript库。本书通过丰富的实例和实战...
jQuery UI Cookbook(2013.7) Adam Boduch (pdf + ePub) 出版时间:2013.7 Adam Boduch Packt 内容简介: jQuery UI is the quintessential framework for creating professional user interfaces. While jQuery ...
ASP.NET jQuery Cookbook(2nd) 英文mobi 第2版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
ASP.NET jQuery Cookbook(2nd) 英文epub 第2版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
2. **增强用户体验**:jQuery的动画效果和异步加载功能可以让Web应用更加生动有趣,提升用户的体验感。 3. **简化AJAX操作**:jQuery内置了强大的AJAX支持,使得PHP与客户端之间的数据交换变得更加简单易行。 4. **...
PHP jQuery Cookbook + codebundle, 英文版 2010-12月
《PHP与jQuery开发实例:PHP jQuery Cookbook》一书旨在为读者提供超过60个简单而高效的实际案例,帮助他们利用PHP结合jQuery创建交互式的Web应用。本书由Vijay Joshi编写,他在不同的平台上拥有超过六年的编程经验...
jQuery Mobile Cookbook 英文无水印原版pdf pdf所有页面使用FoxitReader、PDF-XChangeViewer、SumatraPDF和Firefox测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在...