第30天:DOM对象操作

时间:2023-03-09 14:45:52
第30天:DOM对象操作

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、孩子节点

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>孩子节点</title>
<script>
window.onload=function(){
//childNodes用法
/*var ul=document.getElementById("ul");
var childrens=ul.childNodes;//选择全部孩子
//alert(childrens.length);//7
for(var i=0;i<childrens.length;i++){
if(childrens[i].nodeType==1){
childrens[i].style.backgroundColor="blue";
}
}*/ //children用法
var ul=document.getElementById("ul");
var childrens=ul.children;//选择所有孩子,只有元素节点
alert(childrens.length);

}
</script>
</head>
<body>
<ul id="ul">
<li>123456</li>
<li>123456</li>
<li>123456</li>
</ul>
</body>
</html>

2、DOM节点操作

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>DOM节点操作</title>
<script>
window.onload=function(){
var demo=document.getElementById("demo");
var childrens=demo.children;
//创建节点
var firstDiv=document.createElement("div");
//添加节点
demo.appendChild(firstDiv);
var test =document.createElement("div");
//children[0]就是xiongda
demo.insertBefore(test,childrens[0]);
//demo.insertBefore(test,null);//若无参照点,则为null,新添加的放到最后面 //移除节点
var da=document.getElementById("xiongda");
demo.removeChild(da); //复制节点
var last= childrens[0].cloneNode();
demo.appendChild(last);
demo.parentNode.appendChild(demo.cloneNode(true));
}
</script>
</head>
<body> <div id="demo">
<div id="one"></div>
<div id="xiongda"></div>
</div>
<!--<nav></nav>-->
</body>
</html>