一、定义
DOM :文档对象模型
DMO是针对HTML文档的一个API(应用程序编程接口),DOM描绘了一个层次化的节点树,允许开发人员添加,删除,修改页面的某一部分。
节点分为几种不同的类型 :
- Node类型
- Document类型
- Element类型
- Text类型——文本类型
- Comment类型 —— 注释类型
二、类型的具体说明
Node类型
属性:
1、nodeType , 表示节点类型
规则: 1 –>Element类型 3 –>Text类型 8 –>Comment类型 9 –>Document类型
2、 childNodes ,表示子节点集合,可以使用slice方法将NodeList转换为数组
var arr = Array.prototype.slice.call(nodes,0);
demo:
<head> <meta charset="UTF-8"> <title>Document</title> <script> window.onload = function(){ console.log(document.body.childNodes); var tempArr = Array.prototype.slice.call(document.body.childNodes,0); console.log(tempArr); var texts = tempArr.filter(function(item,index){ return item.nodeType == 3; }); console.log(texts); var eles = tempArr.filter(function(item,index){ return item.nodeType == 1; }); console.log(eles); var com = tempArr.filter(function(item,index){ return item.nodeType == 8; }); console.log(com); var docu = tempArr.filter(function(item,index){ return item.nodeType == 9; }); console.log(docu); } </script> </head> <body> hello <div> <span>world</span> </div> 你好 </body>
|
输出结果:
3、nodeName , 取决于节点类型,如果是元素类型,值为元素的标签名
4、nodeValue , 取决于节点类型,如果是元素类型,值为null
5、parentNode,指向文档树中的父节点
6、previousSibling,兄弟节点的前一个节点
7、nextSibling,兄弟节点的下一个节点
8、firstSibling,childsNode列表中的第一个节点
9、ownerDocument,指向表示整个文档的文档节点
10、hasChildNodes,包含一个或多个节点时,返回true
<head> <meta charset="UTF-8"> <title>Node属性</title> <script> window.onload = function(){ console.log(document.body.childNodes); var childs = document.body.childNodes; console.log(childs.length); console.log(childs[3].nodeName); console.log(childs[1].nodeValue); console.log(childs[0].parentNode); console.log(childs[0].nextSibling); console.log(childs[4].previousSibling); console.log(document.body.firstChild == childs[0]); console.log(childs[0].ownerDocument); console.log(document.body.hasChildNodes()); console.log(childs[0].hasChildNodes()); } </script> </head> <body> hello <div> <span>world</span> </div> 你好 <div> one </div> </body>
|
输出结果:

Node类型的操作节点
appendChild()—— 向childNodes列表末尾添加一个节点
<head> <meta charset="UTF-8"> <title>node节点操作</title> <style> .content{ border:1px solid black; overflow: hidden; } .content > div{ width:50px; height: 50px; background-color: red; float: left; margin: 10px; } .content .two{ background-color: blue; } </style> <script> window.onload = function(){ var div = document.getElementsByClassName('one')[0]; console.log(div); var newDiv = div.cloneNode(true); var btns = document.getElementsByTagName('button'); console.log(btns); btns[0].onclick = function(){ var content = document.getElementsByClassName('content')[0]; content.appendChild(newDiv); } } </script> </head> <body> <button>点击追加</button> <div class="content"> <div class="one"> <span>one</span> </div> <div class="two"> two </div> </div> </body>
|
输出结果:
点击前:

点击后:

- insertBefore()——第一个参数:要插入的节点,第二个参数:作为参照的节点
- replaceChild()——第一个参数:要插入的节点,第二个参数:要替换的节点
- removeChild()——一个参数,即要删除的节点
- cloneNode()——复制节点
<head> <meta charset="UTF-8"> <title>node</title> <style> .content{ border:1px solid black; overflow: hidden; } .content > div{ width:50px; height: 50px; background-color: red; float: left; margin: 10px; } .content .two{ background-color: blue; } .content .three{ background-color: pink; } </style> <script> window.onload = function(){ var btns = document.getElementsByTagName('button'); console.log(btns); var content = document.getElementsByClassName('content')[0]; var newDiv = document.getElementsByClassName('one')[0]; newDiv = newDiv.cloneNode(true); var div3 = document.getElementsByClassName('three')[0]; btns[0].onclick = function(){ content.insertBefore(newDiv,div3); } btns[1].onclick = function(){ content.replaceChild(newDiv,div3); } btns[2].onclick = function(){ content.removeChild(div3); } } </script> </head> <body> <button>插入节点</button> <button>替换节点</button> <button>删除节点</button>
<div class="content"> <div class="one">one</div> <div class="two">two</div> <div class="three">three</div> </div>
</body>
|
点击前:

点击“插入节点”:

点击“替换节点”:

点击“删除节点”:

后记
如需前端交流请以以下方式联系。
QQ:2567046155
Q群:110156046
备注:加好友请注明来源。
版权声明: 此文章版权归zluz所有,如有转载,请註明来自原作者