什么是 DOM
- DOM -> Document Object Model
- DOM 定义了表示和修改文档所需的方法。DOM 对象即宿主对象,由浏览器厂商定义,用来操作 HTML 和 XML 功能的一类对象的集合。也有人称 DOM 是对 HTML 及 XML 的标准编程接口
Document: 整个文档
-
查看元素节点
- getElemntById: 在 IE8 以下不区分大小写
- getElementsByTagName: 取出所有对应标签的元素,是个类数组
- querySelector: 非实时的,类似于镜像
-
遍历节点树
- parentNode -> 父节点 (最顶层节点为 document)
- childNodes -> 子节点们
- firstChild -> 第一个子节点
- lastChild -> 最后一个子节点
- nextSibling -> 后一个兄弟节点
- previousSibling -> 前一个兄弟节点
-
基于元素节点树的遍历
- parentElement -> 返回当前元素的父元素节点 (IE不兼容)
- children -> 只返回当前元素子节点
- node.childElementCount === node.chidren.length (IE不兼容)
- firstElementChild -> 第一个元素节点 (IE不兼容)
- lastElementChild -> 最后一个元素节点 (IE不兼容)
- nextElementSibling/previousElementSibling -> 后一个/前一个兄弟节点 (IE不兼容)
-
节点的四个属性
- nodeName: 元素的标签名,以大写形式表示,只读
- nodeValue:Text 节点或 Comment 节点的文本内容,可读写
- nodeType:该节点的类型, 只读
- 元素节点: 1
- 属性节点: 2
- 文本节点: 3
- 注释节点: 8
- document: 9
- documentFragment: 11
- attributes:Element 节点的属性集合
-
节点的一个方法: Node.hasChildNodes()
- getElementById 方法定义在 Document.prototype 上,即 Element 节点上不能用
- getElementsByName 方法订一张 HTMLDocument.prototype 上,即非 html 中的document不能使用(XML document , Element)
- getElementsByTagName 方法定义在 Document.prototype 和 Element.prototype
- HTMLDocument.prototype 定义了一些常用的属性, body,head 分别指代HTML文档中的标签, document.documentElement --> <html>
- Document.prototype 上定义了 documentElement 属性,指代文档的根元素,HTML文档中,他总是指代<html>元素
- getElementsByClassName,querySelectorAll, querySelector 在 Document.prototype, Element.prototype 中均有定义
Document.prototype === document.__proto__.__proto__
DOM 基本操作
- 增
- document.createElement()
- document.createTextNode()
- document.createComment()
- document.createDocumentFragment()
- 插
- PARENTNODE.appendChild()
新建一个元素,插入是直接插入。插入一个已有的元素,是剪贴,原来元素会被剪贴到新的位置,以前位置的元素消失。- PARENTNODE.insertBefore()
parentNode.insertBefore(a, b) // insert a before b - 删 (谋杀 与 自杀)
- parent.removeChild() // 实际上是剪切出来
- child.remove() // ES5 提供的新方法
- 替换
- parent.replaceChild(new, origin) // 拿新的元素替换老的元素