今天我们来复习JavaScript中的文档对象模型----DOM。
什么是DOM
DOM是三个英文单词的缩写,Document Object Model 简称为DOM,是用来操作HTML和XML的编程接口(API)。
DOM文档像一颗节点树,并且提供了API,让我们可以添加、修改和删除文档中的节点。
注意,DOM并不是JavaScript所提供的,DOM是一种跨平台且独立于语言的用来操作HMTL和XML的方式。
文档中的节点
DOM将HTML表示为树形的节点层次结构,比如下面的HTML
<html>
<head>
<title>JavaScript DOM</title>
</head>
<body>
<p>Hello DOM!</p>
</body>
</html>
上面的HTML结构就像下面的树状结构
在这个DOM树中,Document是根节点,根节点有一个子节点,它是<HTML>
元素。<HTML>
元素也称之为Document元素。
每个HTML只能有一个Document元素,也就是<html>
只能有一个,每个标签都可以由DOM树中的一个节点表示。
Node节点类型
DOM树中的每个节点都有节点类型,JavaScript使用整数来标识节点的类型。
下面是一些节点的类型
常量 | 值 | 描述 |
---|---|---|
Node.ELEMENT_NODE | 1 | 元素节点,像<p> 或 <div> |
Node.TEXT_NODE | 3 | 元素中的文本节点 |
Node.CDATA_SECTION_NODE | 4 | <!CDATA[[ … ]]>`节点 |
Node.PROCESSING_INSTRUCTION_NODE | 7 | XML文档的<?xml-stylesheet … ?> 节点 |
Node.COMMENT_NODE | 8 | 注释节点 <!-- … --> |
Node.DOCUMENT_NODE | 9 | Document 节点 |
Node.DOCUMENT_TYPE_NODE | 10 | <!DOCTYPE html> 节点 |
Node.DOCUMENT_FRAGMENT_NODE | 11 | DocumentFragment 节点 |
使用nodeType属性可以获取节点的类型
node.nodeType
根据nodeType去判断节点的类型是否是元素类型
if (node.nodeType == Node.ELEMENT_NODE) {
// 节点为元素类型
}
nodeName
和 nodeValue
属性
节点还有两个重要属性,分别为nodeName
和 nodeValue
,它们提供关于节点的特定信息
if (node.nodeType == Node.ELEMENT_NODE) {
let name = node.nodeName; // <div>的nodeName为DIV
}
节点和元素
有时我们会混淆节点(Node)和元素(Element)的叫法。
节点是DOM树中任何对象的通用名称。它可以是任何内置的DOM元素,比如Document,或者它可以是HTML文档中指定的任何HTML标签,比如<div>
或 <p>
。
而元素是指Node.ELEMENT_NODE
为1的节点。
通过下图可清晰看出Node和Element间的关系和区别
getElementById()
和querySelector()
方法会返回一个Element
类型的对象,而getElementsByTagName()
或querySelectorAll()
方法返回NodeList
,它是节点的集合。
Node节点关系
任何节点都与DOM树中的其他节点有关系,这些关系就像是家谱一样。
比如<body>
是<html>
节点的子节点,而< html>
是 <body>
节点的父节点,<body>
节点是 <head>
节点的兄弟节点,因为它们有相同的父亲<html>
。
下图说明了节点之间的关系:
总结
- HTML或XML文档的节点树像家谱一样。
- 每个标签都有nodeType属性来表示它的类型
- 元素Element一般是指Node.ELEMENT_NODE的节点
- 在DOM树中,一个节点肯定会与其他节点有关系。
今天我们复习了DOM的一些基础知识,明天继续。
如果你想跟着我一起复习DOM知识,微信搜索【小帅的编程笔记】,每天更新