分享人:陈占乐
目录
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.参考文献
8.更多讨论
DOM是“ Document Object Model ”的缩写,简称“ 文档对象模型 ”
在浏览器中当前载入的文档用文档对象模型来表示。这是一个由浏览器生成的“树结构”,使编程语言可以很容易的访问HTML结构 — 例如浏览器自己在呈现页面时,使用它将样式和其他信息应用于正确的元素,而页面呈现完成以后,可以用JavaScript操作DOM,重构整个 HTML 文档,添加、移除、改变或重排页面上的内容。
全局变量document对象就是整个DOM树的根节点。文档中每个元素和文本在树中都有它们自己的入口 — 称之为节点Node。
Create:动态增加DOM 节点
Delete:删除DOM 节点
Update:更新DOM 节点的内容
Read:获取DOM 节点
1 Document.getElementById()
2 Document.getElementsByTagName()
3 Document.getElementsByClassName()
4 Document.querySelector()
5 Document.querySelectorAll()
6 父节点Node.parentNode
7 子节点Node.children || Node.childNodes
节点类型nodeType | 节点名称nodeName | 节点值nodeValue |
元素节点 | HTML标签的名称(大写) | 1 |
属性节点 | 属性的名称 | 2 |
文本节点 | 元素节点或属性节点中的文本内容;值永远是#text | 3 |
注释节点 | 文档注释,形式为<!-- comment text --> | 8 |
文档节点 | DOM 树的根节点;值永远是#document | 9 |
1 修改节点的文本
innerHTML属性
不但可以修改一个DOM节点的文本内容,还可以直接通过HTML片段修改DOM节点内部的子树
innerText或textContent属性
2 修改节点的css
Node.style.cssProperty
获取的是DOM节点上 style 属性定义的样式即行内样式,‘—’在JavaScript中无效,所以需要在JavaScript中改写为驼峰式命名
Node.setAttribute()
像上面一样直接设置行内样式;预定义样式,设置相应的类名,实现css、js 的分离,不生成行内样式。
1 创建节点
方法 | 说明 |
createElement() | 元素节点 |
createTextNode() | 文本节点 |
createComment() | 文本节点 |
createDocumentFragment() | 文档碎片节点 |
2 添加节点
innerHTML
空DOM节点插入新的DOM节点,非空DOM节点会直接替换掉原来的所有子节点
appendChild() Node.appendChild()
把一个子节点添加到父节点的最后一个子节点;如果节点已经存在于当前文档树,这个节点会从原先的位置删除,再插入到新的位置。
insertBefore() parentNode.insertBefore(newNode , thisNode)
在指定节点的前面插入新节点,重点是要获取参考节点
cloneNode() Node.cloneNode(deep)
appendChild()方法存在副作用,cloneNode()复制节点副本,不会删除原节点。参数deep是否采用深度克隆,如果为true,则该节点的所有后代节点也都会被克隆,如果为false,则只克隆该节点本身
Node.removeChild()
需要删除的节点和其父节点的引用;
Node.parentNode.removeChild(this)
删除一个仅基于自身引用的节点;
在指定节点后面插入节点;在指定节点的前面插入子节点
function appendChildPre(parent , newNode){
if(parent.length>=1){
// 如果存在子节点,则在第一个子节点的前面添加
parent.insertBefore(newNode , parent.firstNode);
}else{
// 如果不存在,则在最后添加
parent.appendChild(newNode);
}
}
function insertAfter(newNode, thisNode){
var parent = thisNode.parentNode;
if (parent.lastChild == thisNode) {
// 如果父节点的最后一个节点是指定节点,则直接添加
parent.appendChild(newNode);
}else {
parent.insertBefore(newNode , thisNode.nextSibling);
//如果不是,则在指定节点的下一个节点前面插入
}
}
参考一 MDN文档操作
参考三 JavaScript 教程
感谢大家观看
BY : 陈占乐