JS包括三部分:ECMAscript、DOM(文档对象)、BOM(浏览器对象)
一、DOM(文档对象)
DOM树
节点(元素、属性、标签、标记等都是节点)
二、访问节点
documment.getElementById()
documment.getElementsByTagName()
documment.getElementsByClassName()
//主流浏览器支持,IE6、7、8不兼容
三、节点访问关系
1、父节点:parentNode
2、兄弟节点:
下一个兄弟:
nextSibling //IE6、7、8认识
nextElementSibling //其他浏览器认识
同理:
上一个兄弟
previousSibling //IE6、7、8认识
previousElementSibling //其他浏览器认识
兼容写法
var one=document.getElementById("one");
var div=one.nextElementSibling||one.nextSibling;//先普通浏览器再IE
div.style.backgroundColor="red";
3、子节点
firstChild
firstElementChild
兼容:one.firstElementChild||one.firstChild
lastChild
lastElementChild 同上
4、孩子节点
childNodes 选出全部的孩子(嫡出)
childNodes:标准属性,返回指定元素的子元素集合,包括HTML节点,所有属性,文本节点
火狐、谷歌高版本会把换行也看作是子节点
利用 nodeType==1 时才是元素节点,通过这个来获取元素节点
5、children 选取所有的孩子,只包括元素节点(庶出)
IE6、7、8包含注释节点,这个要避免开,去掉注释
四、DOM节点操作
新建、插入、删除、克隆节点等等
1、创建节点
var div document.creatElement("li");//生成一个新的li标签
2、插入节点
(1)appendChild();添加孩子到某个盒子的最后面
(2)insertBefore(插入的节点,参照节点);两个参数必写
demo.insertBefore(test,childrens[0]);//放到第一个孩子的前面
如果第二个参数为null,则默认新生成的盒子放到最后面
demo.insertBefore(test,null);
3、移除节点
removeChild() ; //孩子节点
demo.removeChild(da);
4、克隆节点
cloneNode();
也就是复制节点
括号里面可以加参数,如果里面是true,深层复制,除了复制本盒子,还复制子节点
如果为false,浅层复制,只复制本节点,不复制子节点
案例:
1、孩子节点
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>孩子节点</title> 6 <script> 7 window.onload=function(){ 8 //childNodes用法 9 /*var ul=document.getElementById("ul"); 10 var childrens=ul.childNodes;//选择全部孩子 11 //alert(childrens.length);//7 12 for(var i=0;i<childrens.length;i++){ 13 if(childrens[i].nodeType==1){ 14 childrens[i].style.backgroundColor="blue"; 15 } 16 }*/ 17 18 //children用法 19 var ul=document.getElementById("ul"); 20 var childrens=ul.children;//选择所有孩子,只有元素节点 21 alert(childrens.length); 22 23 } 24 </script> 25 </head> 26 <body> 27 <ul id="ul"> 28 <li>123456</li> 29 <li>123456</li> 30 <li>123456</li> 31 </ul> 32 </body> 33 </html>
2、DOM节点操作
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>DOM节点操作</title> 6 <script> 7 window.onload=function(){ 8 var demo=document.getElementById("demo"); 9 var childrens=demo.children; 10 //创建节点 11 var firstDiv=document.createElement("div"); 12 //添加节点 13 demo.appendChild(firstDiv); 14 var test =document.createElement("div"); 15 //children[0]就是xiongda 16 demo.insertBefore(test,childrens[0]); 17 //demo.insertBefore(test,null);//若无参照点,则为null,新添加的放到最后面 18 19 //移除节点 20 var da=document.getElementById("xiongda"); 21 demo.removeChild(da); 22 23 //复制节点 24 var last= childrens[0].cloneNode(); 25 demo.appendChild(last); 26 demo.parentNode.appendChild(demo.cloneNode(true)); 27 } 28 </script> 29 </head> 30 <body> 31 32 <div id="demo"> 33 <div id="one"></div> 34 <div id="xiongda"></div> 35 </div> 36 <!--<nav></nav>--> 37 </body> 38 </html>