DOM 全称是 Document Object Model,也就是文档对象模型。DOM是针对
HTML
和XML
文档的一个API
(应用程序编程接口)。DOM秒回了一个层次化的节点数,允许开发人员添加、移除和修页面的某一部分。DOM脱胎于Netscape
及微软公司创始的DHTML(动态HTML),单现在它已经成为表现和操作页面标记的真正跨平台、语言中立的方式。 —- 《JavaScript高级程序设计》
几个需要了解的前置知识
- 节点层次
DOM可以将任何HTML或XML文档秒回成一个由多层节点构成的结构。即DOM结构把HTML结构抽象成一个树形结构。
以一段HTML为例:
1 | <!--Document--> |
通过上面的方法可以将这个简单的HTML文档表示为一个层次结构。
- 节点类型(nodeType)
节点一共有12种不同类型,包括已经弃用的5个节点。
详见MDN https://developer.mozilla.org/zh-CN/docs/Web/API/Node/nodeType
DOM有什么用
可以通过操作DOM修改页面内容
1 | <html> |
- 上述通过
document.getElementById()
API来获取到HTML文件中ID为xxx
的元素的节点 - 通过
Node.innerText
API来改变ID为xxx
元素里的内容 - 由此可见,我们可以通过操作DOM来修改页面内容(虽然DOM API真的很难用)
DOM增删改查的方法
- 添加元素
方法 | 含义 |
---|---|
Document.createElement() | 创建元素 |
Document.createTextNode() | 创建一个新的文本节点 |
Document.createAttribute() | 创建并返回一个新的属性节点 |
Document.createComment() | 创建并返回一个注释节点 |
Document.createDocumentFragment() | 创建一个新的空的文档片段 |
- 删除元素
方法 | 含义 |
---|---|
Element.removeAttribute() | 从元素中删除指定的属性 |
Element.removeChild() | 删除子元素 |
ChildNode.remove() | 删除元素 |
Child.parentNode.removeChild(child) | 不确定父元素时可这样删除子元素 |
- 修改元素
方法 | 含义 |
---|---|
Node.innerText | 修改元素文本内容 |
Element.innerHTML | 设置或获取描述元素后代的HTML语句 |
node.cloneNode() | 拷贝元素(包括所有属性和值) |
Element.setAttribute() | 设置或者改变指定属性并指定值 |
style.property = new style | 修改元素CSS属性值 |
Node.replaceChild() | 替换子节点 |
Node.classList.add() | 给指定元素添加一个class |
Node.classList.remove() | 给指定元素删除一个class |
- 查找元素
方法 | 含义 |
---|---|
attribute.getAttribute() | 返回元素的指定属性值 |
Document.getElementsByClassName() | 返回一个节点列表(数组),包含了所有拥有指定 class 的子元素 |
Document.getElementsByName() | 返回带有指定名称的对象集合 |
Document.getElementsByTagName() | 返回带有指定标签名的对象集合 |
Document.getElementById() | 返回对拥有指定id的元素引用 |
Document.querySelector() | 返回文档中匹配指定的CSS选择器的第一元素 |
Document.querySelectorAll() | 返回与指定的选择器组匹配的文档中的元素列表 |
总结
DOM API难操作,东西太多太杂,而且很反人类,在实际工作中,我推荐还是使用jQuery来做操作。
__END__