《JavaScript DOM编程艺术》(第二版)这本书的核心理念是 渐进增强” 和 “平稳退化” ,强调JavaScript应该用来增强用户体验,而不是构建网站的基础。即使JavaScript被禁用,网页的核心内容和功能也应该能够正常访问。

第一部分:JavaScript语言基础

这本书没有深入复杂的JavaScript语法,而是聚焦于实现DOM脚本编程所必需的基础知识。

1. 语法概览

1)变量:使用 var 声明变量(注意:本书写作时 let 和 const 尚未普及)。

2)数据类型:字符串、数值、布尔值、数组、对象等。

3)操作符:算术操作符、比较操作符、逻辑操作符等。

4)语句:条件语句、循环语句。

2. 函数

1)函数的定义和调用。

2)理解函数的作用域。

3)返回值:函数如何通过 return 语句返回数据。

3. 对象

1)对象是属性的集合。

2)创建对象的方式:new Object() 和对象字面量 {}

3)访问对象的属性:点符号和方括号符号。

4. 数组

1)创建数组:new Array() 和数组字面量 []

2)数组方法:如 join() 用于将数组合并为字符串。

5. 事件处理

1)事件是JavaScript与用户交互的核心。

2)事件处理函数:如 onclickonmouseoveronmouseoutonkeypress 等。

3)事件处理程序的绑定:本书早期介绍了内联方式,但后续强调了更优的分离方式。


第二部分:DOM编程核心

这是本书的绝对重点,详细讲解了如何通过JavaScript来操作网页。

1. DOM 概述

1)文档对象模型:将HTML文档表示为一棵节点树。

2)节点类型:元素节点、文本节点、属性节点。这是理解DOM操作的基础。

2. 获取元素

1)document.getElementById(‘id’):通过ID获取单个元素。

2)document.getElementsByTagName(‘tagName’):通过标签名获取元素集合。

3)document.getElementsByClassName(‘className’):通过类名获取元素集合。

4)通过这些方法的组合,可以精准地定位到DOM树中的任何节点。

3. 获取和设置属性

1)getAttribute(‘attributeName’):获取元素的某个属性值。

2)setAttribute(‘attributeName’, ‘value’):设置元素的某个属性值。

3)常用于操作 srchreftitleclass 等属性。

4. 动态创建和修改内容

1)innerHTML 属性:可以快速读取或写入元素内部的HTML内容。本书指出了它的便利性,但也提醒了潜在的安全风险。

2)纯DOM方法(更受本书推崇):

① document.createElement(‘tagName’):创建一个新的元素节点。

② document.createTextNode(‘text’):创建一个文本节点。

③ parentNode.appendChild(newNode):将新节点插入到父节点的末尾。

④ parentNode.insertBefore(newNode, targetNode):将新节点插入到目标节点之前。

⑤ nodeValue 属性:用于获取和设置文本节点的值。

5. 操作CSS和样式

1)element.style.property直接修改元素的内联样式。例如 element.style.color = ‘red’

2)最佳实践:本书建议不要直接使用 style 属性,而是通过 className 属性来添加或移除预定义的CSS类。这样可以将表现信息保留在CSS中,实现结构与表现的分离。

6. 事件处理进阶

1)onload 事件:确保在DOM树完全加载后再执行脚本。

2)事件处理函数中的 this:在事件处理函数中,this 指向触发该事件的元素。

3)事件冒泡:这是DOM事件传播机制中的一种重要方式。当某个DOM元素触发事件时,事件会从最具体的元素(即事件目标)开始,沿着DOM树逐级向上传播到更一般的元素,直到到达document对象。

4)事件委托:利用事件冒泡,将事件处理程序添加到父元素,来管理其所有子元素的事件。这是提高性能和动态内容事件处理效率的重要技术。

7. Ajax 初步

1)本书在最后介绍了Ajax的核心对象 XMLHttpRequest

2)讲解了其基本工作流程:open() -> send() -> 监听 onreadystatechange 事件。

3)强调了Ajax的同源策略。

4)通过一个动态加载内容的实例,展示了如何用Ajax实现“渐进增强”。


第三部分:综合实践与最佳实践

这部分是本书的灵魂,它将这些零散的技术点串联成一套完整的开发哲学。

1. 平稳退化

1)确保网页在JavaScript不可用的情况下,基本功能仍然可用。

2)经典案例:点击链接打开新窗口。应该先让链接 href 属性指向一个真实的URL,然后用JavaScript拦截点击事件,并打开新窗口。这样,即使JS失效,用户也能通过链接正常访问内容。

2. 分离 JavaScript

1)结构、表现、行为三者分离。

2)不要使用内联事件处理程序,如 onclick=“...”

3)使用外部JavaScript文件,并通过DOM提供的方法来绑定事件。例如:

element.onclick = function() { ... };
// 或者更现代的方式(书中可能未深入):addEventListener

3. 向后兼容性

1)在调用新的DOM方法前,先检查浏览器是否支持。

2)对象检测:是确保向后兼容的核心技术。

if (document.getElementById) {
  // 安全地使用 getElementById
}

4. 性能考虑

1)尽量少访问DOM:DOM操作通常是性能瓶颈。将多次DOM查询的结果保存在变量中,避免重复查询。

2)尽量少添加标记:精简的HTML和DOM结构有助于提升性能。

3)合并和放置脚本:将多个脚本合并,并将 <script> 标签放在 </body> 之前,以避免阻塞页面渲染。

5. 可访问性

1)考虑到使用屏幕阅读器等辅助技术的用户。

2)动态创建或修改内容时,要确保这些变化能够被辅助设备感知。


贯穿全书的案例:图片库

这本书通过一个“图片库”的案例,从最简单的版本开始,一步步应用上述所有知识点进行重构和优化,完美地演示了如何将一个功能简陋的脚本,进化成一个结构良好、体验优秀、健壮且可访问的现代脚本。

1)第一版:基础功能,内联事件处理。

2)第二版:分离JavaScript,使用 onclick 绑定事件。

3)后续版本:添加了平稳退化、可访问性支持、CSS样式切换、Ajax动态加载等。

总结

《JavaScript DOM编程艺术》不仅仅是一本技术手册,它更是一本前端编程思想启蒙书。它的核心价值在于:

1)理念先行:它首先教会我们“为什么”要这么做,然后才是“怎么做”。

2)渐进增强:这是全书的基石,强调JavaScript的角色是“增强”,而非“必需”。

3)最佳实践:从平稳退化、分离JavaScript到向后兼容,它为我们建立了良好的编程习惯。

4)完整的知识闭环:通过一个贯穿始终的案例,将所有知识点融会贯通,让我们看到技术如何服务于用户体验。

即使今天前端技术已经飞速发展,这本书所倡导的核心思想和最佳实践依然完全适用,是每一位前端初学者必读的经典之作。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐