javascript DOM 编程艺术 札记1
一个重要观点
DOM 是指 文档对象模型,它对应浏览器实际认知的东西。html 文本本身和 html 加载到浏览器中显示的东西并不是完全一致的,后者就是 DOM 节点树,它是浏览器实际认知的东西。一个原因就是 js 等可以操作 DOM,带来的结果就是这个页面的内容和结构还可以变化,而从 html 文本本身是看不出来这种变化的。
一幅地图可以代表一个城市,而 DOM 就是浏览器中实际显示页面(对应城市)的地图。
DOM 定义
上边的是抽象思想,不是具体定义。DOM 实际上是一组 API,而 API 是指得到多方共同承认的一组约定。
DOM 就是一组与平台和语言无关的接口,程序和脚本通过这些接口可以访问和修改文档的内容、结构和样式。
DOM 中的节点
每个 html 标签、标签中的属性和文本都是节点,由这些节点构成的整体就是 DOM 节点树,也就是上面指代的浏览器实际认知的东西。节点有个属性 nodeType,可以区分不同节点。
- 元素节点,nodeType = 1
- 属性节点,nodeType = 2
- 文本节点,nodeType = 3
<h1 id="keypoint">核心概念</h1>
这里的<h1>就是元素节点,'id="keypoint"'为属性节点,"核心概念"为文本节点
获取元素的方法
- document.getElementById("keypoint");
- document.getElementsByTagName("h1");
- document.getElementsByClassName("sale");
这里就不介绍id和class对应的概念了吧,用过CSS和Jquery的应该都知道。
注意后两个返回的是对象数组!!!
获取和设置属性
- object.getAttribute("title");
- object.setAttribute("title", "value");
setAttribute这种对文档的修改查看源代码是看不出来的,这源于 DOM 的工作模式,先加载静态内容,再动态刷新。这里印证了上边提到过浏览器实际认知的东西。
onclick 事件处理函数
用户点击链接时触发的动作,对应一个事件处理函数,函数有返回值,如果返回的false,则会认为“没有被点击”。
<a href="http://ipush.tech" onclick="return false;">点击这里</a>
页面上点击这个的话则不会跳转,因为实际的函数返回的是false
整个 DOM 节点树和 childNodes 属性
上边零星介绍了几个方法和属性,这里系统整理下。
我们知道 javascript 中有三种对象,分别是
- 用户定义对象
- 内建对象,比如 Array、Math 和 Date 等。
- 宿主对象,由浏览器提供的对象。
最基础的对象是window对象,代表的是浏览器的窗体本身,我们的 DOM 节点树就是加载到 window 所代表的窗体内,而这个对应节点树的对象就是 document了。
我们知道有个函数是 window.onload,这也是个事件处理函数,它代表的是文档加载完毕时会立即触发的事件,所谓的加载完毕,就是指document对象已经存在了,要将它赋值给window对象作为它的一个属性的时候。在这时执行的事件算是第一时间对 DOM 进行处理的了,可以想象它用处之大(可以类比java中的构造器函数)。
做实验可知,document这个对象有两个子节点,一个是<!DOCTYPE>,另外一个就是整个<html>
标签包裹的内容。
<script type="text/javascript">
function hello() {
for (var i = 0; i < document.childNodes.length; i++) {
console.info(i);
console.info(document.childNodes[i]);
}
}
window.onload = hello;
</script>
内容展示如图
childNodes可以获取到元素的所有子节点(不包括属性节点),nodeType可以知道节点的类型,而nodeValue则可以用来获取和设定一个节点的值。
但有一点需要注意,举例来说<h1 id="keypoint">核心概念</h1>
中,document.getElementById("keypoint")
得到的是<h1>
这个元素节点,并不是文本节点,我们要获取和设定的是其子节点,应该用 document.getElementById("keypoint").childNodes[0].nodeValue
;
对于子节点,还有些便捷的属性可以用,比如 firstChild 和 lastChild。
javascript DOM 编程艺术 札记1的更多相关文章
- javascript DOM 编程艺术 札记2 平稳退化
定义 指的是即便浏览器不支持javascript,页面的基础展示功能也不会受到影响的做法. 不能平稳退化的实例 javascript:这种伪协议,它可以通过链接调用javascript函数.比如< ...
- 读书笔记:JavaScript DOM 编程艺术(第二版)
读完还是能学到很多的基础知识,这里记录下,方便回顾与及时查阅. 内容也有自己的一些补充. JavaScript DOM 编程艺术(第二版) 1.JavaScript简史 JavaScript由Nets ...
- JavaScript DOM 编程艺术·setInterval与setTimeout的动画实现解析
先贴上moveElement()函数的大纲,为了方便观看,删了部分代码,完整版粘到文章后面. function moveElement(elementID,final_x,final_y,interv ...
- JavaScript DOM编程艺术学习笔记(一)
嗯,经过了一周的时间,今天终于将<JavaScript DOM编程艺术(第2版)>这本书看完了,感觉受益匪浅,我和作者及出版社等等都不认识,无意为他们做广告,不过本书确实值得一看,也值得推 ...
- JavaScript DOM编程艺术第一章:JavaScript简史
本系列的博客是由本人在阅读<JavaScript DOM编程艺术>一书过程中做的总结.前面的偏理论部分都是书中原话,觉得有必要记录下来,方便自己翻阅,也希望能为读到本博客的人提供一些帮助, ...
- 《JavaScript dom 编程艺术》 placeholder占位符IE8兼容办法。
在<JavaScript dom 编程艺术>第11章学来的. 相对于用JavaScript替换文本框的提示语句 <!DOCTYPE html> <html lang=&q ...
- 《javascript dom编程艺术》笔记(一)——优雅降级、向后兼容、多个函数绑定onload函数
刚刚开始自学前端,如果不对请指正:欢迎各位技术大牛指点. 开始学习<javascript dom编程艺术>,整理一下学习到的知识.今天刚刚看到第六章,记下get到的几个知识点. 优雅降级 ...
- 《JavaScript DOM 编程艺术》
前几天京东买了一本书,在豆瓣上好评如潮,买下了啃一啃,书名<JavaScript DOM 编程艺术>,在好好深造一下javaScript.一边啃,一边敲.当然应该要做好笔记.一些简单的就看 ...
- JavaScript DOM编程艺术读后感(1)—— 平稳退化
最近,在读<JavaScript DOM编程艺术(第二版)>这本书,想着将自己的读后感记录下来,作为记忆吧. 其实我并不是最近才刚开始读这本书的,我读了有一段时间了.我是一名web前端开发 ...
随机推荐
- 云原生生态周报 Vol. 3 | Java 8 ❤️ Docker
摘要: Docker Hub遭入侵,19万账号被泄露:Java 8 终于开始提供良好的容器支持:Snyk 年度安全报告出炉,容器安全问题形势空前严峻. 业界要闻 Docker Hub遭入侵,19万账号 ...
- 给博客添加rss订阅
如果是自己搭建博客,有一个问题是如何写一篇新的文章就可以告诉读者,你写了一篇新的?一个简单方法是使用 rss ,RSS订阅是站点用来和其他站点之间共享内容的一种简易方式,即Really Simple ...
- oracle使用DECODE函数来减少处理时间
使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表. 例如: SELECT COUNT(*),SUM(SAL) FROM EMP WHERE DEPT_NO = 0020 AND ENAM ...
- css的一些小问题
这是今天整理的笔记一.属性书写顺序: Formatting Model(布局方式.位置) > Box Model(尺寸) > Typographic(文本相关) > Visual(视 ...
- Python--day64--找到作者关联的所有书籍对象、ORM多对多关联查询的原理
找到当前作者关联的所有书籍对象: ORM多对多关联查询的原理: 编辑作者:
- H3C 在接口上应用ACL
- [转]如何让多个不同类型的后端网站用一个nginx进行反向代理实际场景分析
前段时间公司根据要求需要将聚石塔上服务器从杭州整体迁移到张家口,刚好趁这次机会将这些乱七八糟的服务器做一次梳理和整合,断断续续一个月迁移完 成大概优化掉了1/3的机器,完成之后遇到了一些问题,比如曾今 ...
- 2018-8-10-WPF-可获得焦点属性
title author date CreateTime categories WPF 可获得焦点属性 lindexi 2018-08-10 19:16:53 +0800 2018-05-15 15: ...
- [转]分布式监控工具Ganglia 介绍 与 集群部署.
如果你目的很明确就是冲着标题来的,不爱看我唠叨,请直接进入第二个分割线之后的内容. 其实之前就是有做Swift监控平台的打算的,但是因为没什么硬性需求么,也不要紧的,就一直搁置了.最近实验室来了个大二 ...
- linux inode 结构
inode 结构由内核在内部用来表示文件. 因此, 它和代表打开文件描述符的文件结构是不 同的. 可能有代表单个文件的多个打开描述符的许多文件结构, 但是它们都指向一个单个 inode 结构. ino ...