一个重要观点

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的更多相关文章

  1. javascript DOM 编程艺术 札记2 平稳退化

    定义 指的是即便浏览器不支持javascript,页面的基础展示功能也不会受到影响的做法. 不能平稳退化的实例 javascript:这种伪协议,它可以通过链接调用javascript函数.比如< ...

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

    读完还是能学到很多的基础知识,这里记录下,方便回顾与及时查阅. 内容也有自己的一些补充. JavaScript DOM 编程艺术(第二版) 1.JavaScript简史 JavaScript由Nets ...

  3. JavaScript DOM 编程艺术·setInterval与setTimeout的动画实现解析

    先贴上moveElement()函数的大纲,为了方便观看,删了部分代码,完整版粘到文章后面. function moveElement(elementID,final_x,final_y,interv ...

  4. JavaScript DOM编程艺术学习笔记(一)

    嗯,经过了一周的时间,今天终于将<JavaScript DOM编程艺术(第2版)>这本书看完了,感觉受益匪浅,我和作者及出版社等等都不认识,无意为他们做广告,不过本书确实值得一看,也值得推 ...

  5. JavaScript DOM编程艺术第一章:JavaScript简史

    本系列的博客是由本人在阅读<JavaScript DOM编程艺术>一书过程中做的总结.前面的偏理论部分都是书中原话,觉得有必要记录下来,方便自己翻阅,也希望能为读到本博客的人提供一些帮助, ...

  6. 《JavaScript dom 编程艺术》 placeholder占位符IE8兼容办法。

    在<JavaScript dom 编程艺术>第11章学来的. 相对于用JavaScript替换文本框的提示语句 <!DOCTYPE html> <html lang=&q ...

  7. 《javascript dom编程艺术》笔记(一)——优雅降级、向后兼容、多个函数绑定onload函数

    刚刚开始自学前端,如果不对请指正:欢迎各位技术大牛指点. 开始学习<javascript dom编程艺术>,整理一下学习到的知识.今天刚刚看到第六章,记下get到的几个知识点. 优雅降级 ...

  8. 《JavaScript DOM 编程艺术》

    前几天京东买了一本书,在豆瓣上好评如潮,买下了啃一啃,书名<JavaScript DOM 编程艺术>,在好好深造一下javaScript.一边啃,一边敲.当然应该要做好笔记.一些简单的就看 ...

  9. JavaScript DOM编程艺术读后感(1)—— 平稳退化

    最近,在读<JavaScript DOM编程艺术(第二版)>这本书,想着将自己的读后感记录下来,作为记忆吧. 其实我并不是最近才刚开始读这本书的,我读了有一段时间了.我是一名web前端开发 ...

随机推荐

  1. Knative 核心概念介绍:Build、Serving 和 Eventing 三大核心组件

    Knative 主要由 Build.Serving 和 Eventing 三大核心组件构成.Knative 正是依靠这三个核心组件,驱动着 Knative 这艘 Serverless 巨轮前行.下面让 ...

  2. laravel 实现微博第三方登陆

    https://blog.csdn.net/a12541254/article/details/79415550 1.安装 composer require socialiteproviders/we ...

  3. 十分钟学会 Fiddler

    一.Fiddler介绍 Fiddler是一个http抓包改包工具,fiddle英文中有"欺骗.伪造"之意,与wireshark相比它更轻量级,上手简单,因为只能抓http和http ...

  4. H3C TCP封装

  5. H3C 链路层协议

  6. 学习PHP好,还是Python好呢?

    首先简单介绍一下Python. Python在出现以来,已经有数以千计基于这项技术的网站和软件项目,Python因其独有的特点从众多开发语言中脱颖而出,深受世界各地的开发者喜爱. 下面,我们列举了Py ...

  7. elasticsearch-倒排索引原理

    倒排索引 Elasticsearch 使用一种称为 倒排索引 的结构,它适用于快速的全文搜索.一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表. 例如,假设我们有两个 ...

  8. 使用基于Apache Spark的随机森林方法预测贷款风险

    使用基于Apache Spark的随机森林方法预测贷款风险   原文:Predicting Loan Credit Risk using Apache Spark Machine Learning R ...

  9. 【CSS3 + 原生JS】移动的标签

    左图为本博客右侧截取的GIF图,右图为代码效果 HTML: <!DOCTYPE html> <html lang="en"> <head> &l ...

  10. WebService 基础知识点和用Postman调试

    阅读连接:Retrofit 用Soap协议访问WebService 详解 参考 1.java发HTTP POST请求(内容为xml格式) 2. android解析XML总结(SAX.Pull.Dom三 ...