《jQuery Cookbook中文版》——1.2 在DOM加载之后、整个页面加载之前执行jQuery/JavaScript代码

简介:

本节书摘来自异步社区《jQuery Cookbook中文版》一书中的第1章,第1.2节,作者:【美】jQuery社区专家组 译者:姚军 , 孙博更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.2 在DOM加载之后、整个页面加载之前执行jQuery/JavaScript代码

1.2.1 问题
采用无干扰式JavaScript方法论的现代JavaScript应用程序通常只在DOM完全加载之后才执行JavaScript。实际情况是,任何DOM遍历和操纵都要求在操作之前必须加载DOM。需要一种手段来确定客户端(最常见的是Web浏览器)何时完成DOM的加载(这时图片和SWF文件等资源可能还没有完全加载)。如果在这种情况下使用window.onload事件,包括所有资源的整个文档完全加载之后才能触发onload事件,这对大部分Web冲浪者来说太费时间。需要一个事件,告诉我们何时可以遍历和操纵DOM。

1.2.2 解决方案
jQuery提供ready()方法,这是一个定制的事件处理程序,通常与DOM的文档对象绑定。ready()方法的参数是一个函数,后者包含在DOM可以遍历和操纵时执行的JavaScript代码。下面是一个简单的例子,在DOM就绪而页面还未完全加载时打开一个alert()窗口:

<!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 not loaded, must use ready event
    alert(jQuery('p').text());
  });
</script>
</head>
<body>
<p>The DOM is ready!</p>
</body>
</html>
AI 代码解读

1.2.3 讨论
jQuery用ready()事件处理程序方法来代替JavaScript核心的window.onload事件。可以根据需要多次使用它。使用这个定制事件时,建议将它放在样式表声明和包含文件之后,这样能够确保ready()事件执行任何jQuery或JavaScript代码之前,所有元素属性都已经正确定义。

此外,jQuery函数本身提供使用jQuery定制的ready事件的快捷方式。使用这个快捷方式,下面的alert()示例可以改写为:

<!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未加载,必须使用就绪事件
    alert(jQuery('p').text());
  });
</script>
</head>
<body>
<p>The DOM is ready!</p>
</body>
</html>
AI 代码解读

这个定制的jQuery事件只有在JavaScript必须嵌入到页面顶端的文档流并封装在

元素里时才有必要。我只需将所有JavaScript文件包含和内联代码放在结束元素之前,就能避免使用ready()事件,这么做有两个原因。

首先,现代优化技术已经断言,当JavaScript放在页面解析的最后由浏览器加载时,页面的加载就会变得更快。换句话说,如果你将JavaScript放在网页的最后,浏览器将先加载之前的所有内容,然后才加载JavaScript,这是一件好事,因为大部分浏览器通常会暂停其他加载活动,等待JavaScipt引擎编译网页中包含的JavaScipt。从某种程度上说,将JavaScript放在网页文档的开头会形成瓶颈。我知道某些情况下将JavaScript放在

元素中更加简单,但坦诚说,我从未发现绝对必须这么做的情况。我在开发中因为将JavaScript放在页面最后而造成的所有困难都很容易克服,比起得到的优化效果,这些努力也都是值得的。

其次,如果提高网页的速度是我们的目标,为什么要为简单地将代码放到页面最后就能解决的问题而加入更多的功能呢?如果让我在较多代码和较少代码之间做出选择,我选择使用较少的代码。不使用ready()事件减少了代码量,而代码越少,网页运行得总是越快。

基于这些理由,在下面这个例子中,alert()代码没有使用ready()事件:

<!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());//提示DOM已经加载
</script>
</body>
</html>
AI 代码解读

注意,我已经将所有的JavaScript放在

结束元素之前。HTML文档中的任何其他标记应该都在JavaScript之前。
目录
打赏
0
0
0
0
1819
分享
相关文章
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
array.map()可以用来数据转换、创建派生数组、应用函数、链式调用、异步数据流处理、复杂API请求梳理、提供DOM操作、用来搜索和过滤等,比for好用太多了,主要是写法简单,并且非常直观,并且能提升代码的可读性,也就提升了Long Term代码的可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
深入了解jQuery:轻松实现高效的DOM操作
【10月更文挑战第11天】深入了解jQuery:轻松实现高效的DOM操作
111 0
jQuery 操作 DOM 及 CSS
本文介绍了如何使用jQuery进行DOM操作和CSS样式的修改,包括如何获取和设置元素的文本内容、属性值、添加和删除元素,以及如何使用jQuery的addClass、removeClass、toggleClass、hasClass和css方法来操作元素的CSS。通过示例代码,展示了jQuery在实际开发中的便捷性。
jQuery 操作 DOM 及 CSS
JavaScript HTML DOM 集合(Collection)
JavaScript HTML DOM 集合(Collection)
65 4
Jquery常用操作汇总,dom操作,ajax请求
本文汇总了jQuery的一些常用操作,包括DOM元素的选择、添加、移除,表单操作,以及如何使用jQuery发送Ajax请求,涵盖了GET、POST请求和文件上传等常见场景。
深入理解jQuery:高效DOM操作与事件处理
【10月更文挑战第11天】深入理解jQuery:高效DOM操作与事件处理
56 0
JavaScript中的DOM解析器DOMParser api的讲解
`DOMParser`能将XML或HTML源码字符串解析成DOM `Document`。通过`new DOMParser()`创建实例,使用`.parseFromString(string, type)`方法进行解析,其中`string`为待解析的字符串,`type`指定解析类型如`text/html`或`text/xml`等,返回一个`Document`对象。例如,可解析包含`&lt;p&gt;666&lt;/p&gt;`的字符串并获取其文本内容`666`。
340 1
JavaScript基础-DOM操作:查找、创建、修改
【6月更文挑战第12天】本文介绍了DOM基础,包括查找元素(getElementById、getElementsByClassName等)、创建新节点(createElement、createTextNode)和修改节点(innerText、innerHTML、setAttribute等)。强调了易错点,如ID唯一性、性能考量和安全问题,并提供了代码示例。熟练掌握DOM操作对前端开发至关重要,但应注意性能优化,适时使用框架或库。
111 2
JavaScript基础-DOM操作:查找、创建、修改
【JavaScript 】DOM操作快速入门
【JavaScript 】DOM操作快速入门
198 2
前端框架与库 - jQuery基础与DOM操作
【7月更文挑战第18天】jQuery 是一个简化JavaScript任务的库,以其“write less, do more”理念著称。核心功能包括DOM操作、事件处理和Ajax。DOM操作如选择元素(`(&quot;p&quot;)`、`(&quot;#myDiv&quot;)`、`(&quot;.myClass&quot;)`)、创建及添加元素、修改属性和内容。事件处理如绑定(`click`)和触发(`trigger`)。常见问题涉及``符号冲突(使用`jQuery`代替)、异步加载管理和选择器性能优化。了解并规避这些问题能提升jQuery使用效率。
63 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等