《JavaScript DOM 编程艺术(第二版)》笔记

JavaScript DOM 编程艺术(第二版) 本书讲述了JavaScript、DOM和HTML5的基础知识,着重介绍了DOM编程技术背后的思路和原则:平稳退化、渐进增强和以用户为中心等。这些概念对于任何前端Web开发工作都非常重要。本书将这些概念贯穿在书中的所有代码示例中,以便呈现用来创建图片库页面的脚本、用来创建动画效果的脚本和用来丰富页面元素呈现效果的脚本,最后结合所讲述的内容创建了一个实际的网站。 本书适合Web设计师和开发人员阅读。 立即下载

第3章 DOM

  • 即使在整个文档里这个标签只有一个元素,getElementsByTagName也返回一个数组。此时的数组长度是1。
  • HTML5 DOM 新增 getElementsByClassName
  • 在使用类名获取标签匹配时,如果有多个类名,类名顺序和带有更多类名都可以匹配。
  • 检查某项数据是否是null时,我们其实是在检查它是否存在。
  • 通过setAttribute对文档做出修改后,在通过浏览器查看源代码看到的仍是改变前的属性值,也就是说,setAttribute做出的修改不会反映在文档本身的源代码里。这中表里不一的现象来自DOM的工作模式:先加载文档的静态内容,再动态刷新,动态刷新不影响文档的静态内容。对页面内容进行刷新却不需要再浏览器里刷新页面。
  • setAttribute实际完成两项操作:创建属性,设置值。
if(something) == if(something != null)

第4章 事件处理函数

事件处理函数的作用是,在特定事件发生时调用特定的JavaScript代码。
事件处理函数的工作机制是,在给某个元素添加了事件处理函数后,一旦事件发生,相应的JavaScript代码就会得到执行。被调用的JavaScript代码可以返回一个值,这个值会被传递给那个事件处理函数。例如:我们可以给某个链接添加一个onclick事件处理函数,并让这个处理函数所触发的JavaScript代码返回布尔值true或false。这样一来,当这个链接被点击时,如果那段JavaScript代码返回的值是true,onclick事件处理函数就认为“这个链接被点击了”;反之,如果返回的值是false,onclick事件处理函数就认为“这个链接没有被点击”。


第5章 最佳实践

一首老歌中这样写道:不在于你做什么,只在于你怎么做。


1.平稳退化

有的用户在使用浏览器时可能禁止了JavaScript脚本(例如使用插件避开广告)。
如果正确的使用了JavaScript脚本,就可以让访问者在他们禁止JavaScript的情况下仍能顺利的浏览网页。这就是平稳退化。
虽然某些功能无法使用,但最基本的操作仍能进行。

2.渐进增强

所谓“渐进渐强”就是就是用一些额外的信息层去包裹原始数据。

在给HTML内容加上各种标记后,就可以使用各种CSS指令控制内容的显示效果。CSS指令构成一个表示层。这个标识层就像是一张透明的彩色薄膜,可以包裹到文档的结构上,使其内容产生各种色彩。

3.分离JavaScript

考虑外部引入的JavaScript脚本内代码声明逻辑与HTML文档标签顺序逻辑在程序执行时的先后顺序。因为脚本加载时文档可能不完整,所以模型也不完整。没有完整的DOM,DOM方法就不无法正常工作。

<head>
    <script src=""></script>
</head>
<body>
    <a href=""></a>
</body>

先加载脚本,后续标签还未读取。DOM不完整。

<head>  
</head>
<body>
    <a href=""></a>
    <script src=""></script>
</body>

当引入多个JS脚本,浏览器可能会一次加载多个,不能保证哪个文件最先结束加载。

如果让目标代码在HTML文档加载到浏览器之后马上开始执行:
HTML文档全部加载完毕时会触发onload事件。

window.onload = function;

4.向后兼容

对象检测:检测浏览器对JavaScript的支持程度。这有点像游乐园里的警告牌:“你必须到达这一身高才能参与这项活动”。换句话说需要在DOM脚本里表达出下面的含义:“你必须理解这么多的JavaScript语言才能执行这些语句”。

if(method){
    statements
}

如果你理解这个方法,请进来坐坐,给你拿拖鞋,我给你倒咖啡,我们聊聊人生……

if(!method){
    statements
    return false;
}

如果你不理解这个方法,请离开。

if(!document.getElementsByTagName || document.getElementById) return false;

如果你不理解getElementById和getElementsByTagName,你就不能参加这项游乐活动。

5.性能考虑

  • 尽量少访问DOM和减少标记

不管什么时候,只要是查询DOM中的某些元素,浏览器都会搜索整个DOM树,从中查找可能匹配的元素。

好的做法是将第一次搜索的结果存到变量里。

  • 引入外部脚本,尽量合并脚本
  • 压缩脚本代码

第6章 案例:图片库改进

网页的行为层(JavaScript)是作用于其结构层(HTML)之上的。
文档的结构内容与文档点的行为分离非常重要:如果想用JavaScript给某个网页添加一些行为,就不应该让JavaScript代码对这个网页的结构有任何依赖。

作者的思路很清晰,编程前列出所有需求与功能,然后逐一实现。

  • 改变事件处理函数默认行为
return false;
翻译成人类语言:按照这个链接没被点击的情况采取行动。
规章制度下的人情世故

DOM Core 和 HTML DOM

  • getElementById
  • getElementsByTagName
  • getAttribute
  • setAttribute

这些方法都是 DOM Core 的组成部分。它们并不专属于JavaScript,支持DOM的任何一种设计语言都可以使用它们。

属性onclick属于HTML-DOM,它们出现在DOM Core之前。

document.getElementByTagName("form")

document.forms  // HTML-DOM提供了forms对象
element.getAttribute("src")

element.src
a.setAttribute("src",source)

a.src = source

第7章 动态创建标记

innerHTML 属性

用DOM的眼睛来看一段结构:
这里写图片描述

从innerHTML的角度来看:

这里写图片描述

div标签里有面只有一个 HTML字符串
值是:

<p>This is<em>my</em>content.</p>

innerHTML属性无细节可言。想要获得细节,就必须使用DOM方法和属性。标准化的DOM像手术刀一样精细,innerHTML属性就像大锤一样粗放。

标准的DOM可以替代innerHTML,同时提供了更高的精确性和更强大的功能。


DOM方法

DOM是文档的表示。DOM所包含的信息与文档里的信息一一对应。
(文档是玩家,DOM是你游戏里创建的1:1仿真角色,浏览器是游戏)
DOM是一条双车道。不仅可以获取文档的内容,还可以更新文档的内容。改变了DOM树,文档在浏览器里的呈现效果就会发生变化。setAttribute方法并不改变文档的物理内容,如果用编辑器而不是浏览器去打开这个文档,我们将看不到任何变化。只有在用浏览器打开文档时才能看到文档呈现效果的变化。

这是因为浏览器实际显示的是那颗DOM节点树。在浏览器看来,DOM节点树才是文档。动态方式创建标记实际上并不是在创建标记,而是在改变DOM节点树。从DOM的角度思考问题。

在DOM看来,一个文档就是一颗节点树。如果你想要在节点树上添加内容,就必须插入新的节点。

  • createElement 方法:创建一个元素节点
createElement(nodeName)

将新创建的元素赋给一个变量是个好主意:

var newElementP = document.createElement("p");

变量现在包含着一个指向刚创建出来的那个p元素的引用。
虽然现在这个新创建的p元素已经存在了,但它还不是任何一颗DOM节点树的组成部分,它只是游荡在JavaScript世界里的一个孤儿。这种情况称为 文档碎片(document fragment)。

  • appendChild 方法:将新创建的节点插入节点树
parent.appendChild(child)

现在可以将孤儿放到属于他的家了。

  • createTextNode 方法:创建一个文本节点
document.createTextNode(text)

创建元素节点,插入元素节点之后,我想要写一条文本节点,就要用到这个方法。

  • insertBefore 方法:把一个新元素插入到一个现有元素的前面
parentElement.insertBefore(newElement,targetElement)

newElement:想插入的元素
targetElement:想插在那个元素之前
parentElement:目标元素的父元素
torchsparse安装 torchsparse安装以及安装失败原因分析和解决 阅读详情

相关推荐

【无人机对抗】基于matlab无人机红蓝对抗仿真【含Matlab源码 4436期】

无人机红蓝对抗仿真 完整代码,包运行;可提供运行操作视频!适合小白!

Matlab3024528700的博客 1380

JavaScript_DOM编程艺术(第二版)第四章

1、事件处理函数,在链接中添加onclick事件,需要return false,否则链接会被触发。 Fireworks 2、childNode属性可以用来获取任何一个元素的所有子元素 var body_element = document.getElementsByTagName("body")[ 0 ].childNode 3、nodeType属性          body_el

yangwen123222的博客 435

SAP子公司财务账套配置实战:从公司代码到记账期间变式的关键步骤

本文详细介绍了为SAP子公司快速配置财务账套的实战步骤。通过复用母公司成熟配置,重点阐述了从创建公司代码、关联控制范围到分配记账期间变式的核心流程,帮助顾问在一两个小时内完成核心骨架搭建,实现高效集团财务管控。

cake8的博客 166

【我的JS第三本】JavaScript_DOM编程艺术第二版读书笔记

经过前一段时间HTML&CSS的学习,感觉视频加读书是一个比较不错的学习方法,两者相辅相成,互相补充,所以也准备看看关于JavaScript的书。       2015年12月14日,之前使用韩顺平老师的教学视频学习了JavaScript,复习了之前的学习笔记后,我发现看视频理解虽然没问题,但是很多细节,关键词,都没能记住,而且对于对象,DOM变成的理解都不够深入,只是简单的知道它们能够实现什么

Creabine的博客 5361

CentOS 7下kkFileView 4.4.0离线部署全攻略(含LibreOffice 7.5配置避坑指南)

本文详细介绍了在CentOS 7环境下离线部署kkFileView 4.4.0的全流程,包括LibreOffice 7.5的配置避坑指南、中文字体解决方案以及企业级运维实践。通过本指南,用户可以在内网环境中快速搭建稳定可靠的文档在线预览服务,提升办公效率。

weixin_28481133的博客 290

PCI-Express、MiniPCIe、ExpressCard接口转换说明/引脚互换关系

通过引脚PIN互换可以在PCI-Express、MiniPCIe、ExpressCard之间切换不同的接口;提供接口引脚表和标准尺寸图。

tech34的博客 7125

JavaScript.DOM编程艺术笔记 第二章

0x00 前言 第一章是javascript的历史,这里就不做笔记了,直接从第二章开始。当然我也只是会记录我不知道的,或者我觉得需要记录的东西。 0x01 笔记 1.html调用javascript的方式 内部调用 在任何地方直接使用<script></script> 外部引用 新建一个js文件,然后在内部调用<script scr="1.js"></s...

王嘟嘟的博客 599

STM32 ES8266上阿里云IOT MQTT实践【第七章】:ESP8266+MQTT上阿里云物联网平台实践

本篇文章讲述了如何使用stm32接入阿里云IOT,WiFi模块为ESP8266,可以实现发布以及订阅。

超级大洋葱的博客 2万+

读书笔记:JavaScript DOM 编程艺术(第二版)

读完还是能学到很多的基础知识,这里记录下,方便回顾与及时查阅。内容也有自己的一些补充。

lmrylll的博客 1258

ANSYS MAXWELL内置式永磁同步电机(IPMSM)转矩最大时输入电流相位的确定

1.在转子转速为零时看一个周期内的转矩变化

qq_41752507的博客 6517

扩视机器视觉—Halcon机器视觉48个实战项目六(检测定位角度)

此项目halcon检测检测定位角度问题,并显示。

qq_21516871的博客 1096

JavaScript DOM编程艺术(第二版)笔记

1.CSS继承机制; 2.getElementById,getElementsByTagName,getElementsByClassName,getAttribute,setAttribute; 3.element.childNodes element.parentNode nextSibling previousSibling childNodes firstChild lastChild...

laohuangjiade_的博客 219

华为OD机试真题 新系统 - 8位LED控制器 (Java/Py/C/C++/Js/Go)

本文整理华为 OD 机试新系统机考真题库,涵盖高频考点精析与完整题目内容,提供 C 语言、Java、C++、Python、Go、JavaScript 多语言源码实现,搭配详细解题思路讲解,并支持在线 OJ 刷题练习,助力高效备考华为 OD 机试新系统。

算法大师! 1978

JavaScript DOM 编程艺术 第二版 学习笔记。

第一章 JavaScript 简史 第二章 JavaScript 语法 JavaScript 代码可以放在head标签内部的 script 标签内,另外一种更好的方式是把JavaScript代码保存到独立的文件中,通过在head标签里创建script标签,并把src指向这个文件的路径。 注释:建议在JavaScript中使用//来表示单行注释,用/* */来表示多行注释。 变量:JavaS

keep fighting 302

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JavaScript_DOM编程艺术第二版学习笔记-第8章

上一章节学会利用DOM方法和属性来动态创建标记,这一章节,我们将继续在实践中利用这些技术。 8.1 不应该做什么理论上,我们可以用JS把一些重要的内容添加到网页上。事实上这是一个坏主意,因为这样一来JS就没有任何空间去平稳退化。那些缺乏必要的JS支持的访问者就会永远也看不到你的重要内容。 如果察觉到自己正在使用DOM技术把一些重要的内容添加到网页上,则应该立即停下来去检讨,很可能你会发现自己正在滥

sofia92的博客 1095

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

JavaScript_DOM编程艺术第二版学习笔记-第9章

CSS-DOM9.1 style属性语法,element.style.property比如,获取文档的颜色:para.style.color这里,需要注意的是,当获取如:font-family中间有-的属性时,属性名采用驼峰命名法,及para.style.fontFamily不管CSS属性名有多少连字符,DOM一律采用驼峰命名法表示他们。 DOM 的style对象只包含在HTML代码里,用styl

sofia92的博客 1156

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

JavaScript DOM 编程艺术(第二版)--读书笔记

DOM的属性:childNodes、nodeType、nodeValue、nodeName、firstChild、lastChild1、childNodes element.childNodes 获取任何一个元素的所有子元素,它是包含这个元素全部子元素的数组 文档里的几乎每样东西都是一个节点,甚至连空格、换行符和注释都会被解释为一个节点,而他们都包含在childNodes属性所返回的数组中

luojiandecsdn的博客 746

【JavaScript DOM编程艺术(第二版)】笔记

第1章 javascript简史 1.什么是DOM? 简单的说,DOM是一套对文档的内容进行抽象和概念化的方法.\ 第2章 javascript语法 1.内建对象: 内建在javascript语言里的对象.(可以new出来的) 2.宿主对象: 由浏览器提供的预定义对象称为宿主对象. 第3章 DOM 1.getElementBy...

weixin_30646315的博客 147

JavaScript Dom编程艺术(第二版)读书笔记 第三章DOM

如果没有document(文档),DOM也就无从谈起。当创建了一个网页并把它加载到Web浏览器中时,Dom就在幕后悄然而生。它把你编写的网页文档转换为一个文档对象。

m0_57713008的博客 406

JavaScript Dom编程艺术(第二版)读书笔记 第二章:JavaScript语法

作者用一个JavaScript图片库作为例子贯穿全书讲解了DOM操作和优化,并且考虑了浏览器的兼容,尽可能符合渐进增强和平稳退化原则,最后讲解了不得不依赖JavaScript实现的一些动画效果,并且简单介绍了HTML5的出现带来的一些新的属性和方法。总之,本书非常适合前端入门学习,理解了最底层操作原理,也就可以循序渐进理解上层高级框架背后的设计思想。...

m0_57713008的博客 397

JavaScript_DOM编程艺术第二版学习笔记-第7章

动态创建标记 传统技术:document.write和innerHTML 深入剖析DOM方法:createElement、createTextNode、appendChild和insertBefore。 一、传统方法1.1 document.write 利用document.write可以在页面上写入内容,但它有着一个很大的缺点就是它违背了“行为与表现分离”的原则。即使将documen

sofia92的博客 1567

JavaScript_DOM编程艺术第二版学习笔记-第6章

第5章总结编写JS脚本,需注意,它是否支持平稳退化;渐进增强;向后兼容;分离JavaScript原则。在第五章中,我们已经基本实现了JavaScript与HTML文档的分离,只有onclick事件仍在文档中。第6章将探讨如何实现事件函数与HTML文档的分离。一、添加事件处理函数1.1 检查点如第五章介绍过的,灵活使用逻辑或逻辑非,来检测当前浏览器是否识别JS脚本中的DOM方法。 if (!do

sofia92的博客 566

JavaScript DOM编程艺术第二版-学习笔记

DOM的含义:Document(文档)、Object(对象)、Model(模型) 现在读完前7章,对逐步改进的图片库的代码进行简单总结。 最初版 HTML代码: Image Gallery Snapshots Fireworks Coffee Rose

Zoe_慕子晴的博客 1007

JavaScript DOM 编程艺术第二版 读书笔记4

读完了Creating Markup on the Fly这一章,这章的主要内容是我们怎么能动态地修改DOM的structure。Browser是根据DOM的structure来显示的,所以当我们动态地修改了DOM的structure后,browser显示的内容是会改变的,但是我们看网页源码是,还是原来的structure,是没有改变过的。     1、利用document.write和

1266

《JavaScript DOM编程艺术》(第二版)学习笔记(一)

这本书去年就买了但一直没看,闲暇的时候看了下,发现里面写的内容还真是不错,所以决定一边在博客上记录些学习的笔记,以便以后观看及查找方便。 js文件最好的做法是放在< body>标签里,这样能使浏览器更快的加载页面 语句(statement) 建议在每条语句的末尾都加上一个分号,这样做让代码更容易阅读。让每条语句独占一行的做法能更容易跟踪JavaScript脚本的执行顺序,如 ...

兮动人 866

Javascript DOM编程艺术(第二版)读书笔记

今天,刚好把这本书看完第一遍,但是感觉囫囵吞枣式的看书方法并没有让我有更多的收获,故决定回头再过一遍,一下是我的读书(复习)笔记: 1.平稳退化:所谓平稳退化就是如果用户在浏览你的网页关闭了javascript选项仍然能够顺利地浏览你的网页,这就是所谓的平稳退化。 例如: &amp;amp;lt;body&amp;amp;gt; &amp;amp;lt;h1&amp;amp;gt;Snapshots&amp;amp;lt;/h1&amp;amp;gt; &

weixin_43734973的博客 194
上一篇: 180406 客户端JS WebAPI
下一篇: 180418 JSON
simpleone_
博客等级 码龄9年 14粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值