一,DOM是什么?
1. DOM对象
DOM,全称“Document Object Model(文档对象模型)”,它是由W3C定义的一个标准。
DOM提供了很多方法,我们可以通过这些方法来操作页面中的某一个元素。
DOM操作,可以简单理解成“元素操作”。
2. DOM结构
DOM采用的是“树形结构”,用“树节点”形式来表示页面中的每一个元素。
例如下面的代码:
<!DOCTYPE html><html><head><meta charset="utf-8" /><title></title><body><h1>绿叶学习网</h1><p>绿叶学习网是一个……</p><p>绿叶学习网成立于……</p></body></html>
对于上面的HTML文档,DOM会将其解析为下面的树形结构
我们在操作元素时,其实就是把这个元素看成一个对象,然后使用这个对象的属性和方法来进行相关操作。
二,节点类型
在JavaScript中,DOM节点共有12中类型,最常见的有3种:
- 元素节点
- 属性节点
- 文本节点

表示元素的叫做“元素节点”,表示属性的叫做“属性节点”,而表示文本的叫做“文本节点”。
节点跟元素是不一样的概念,节点是包括元素的!
对于节点类型,需要特别注意:
- 属性节点和文本节点看起来像是元素节点的一部分,但实际上,它们是独立的节点,并不属于元素节点;
- 只有元素节点才可以有子节点,属性节点和文本节点都无法拥有子节点。
三,获取元素
获取元素,准确来说,就是获取“元素节点”(不是属性节点或文本节点)。
在JavaScript中,我们可以通过以下6种方式来获取指定元素:
1. getElementById()
该方法是通过id来选中元素
语法:document.getElementById("Id名")
例:
<!DOCTYPE html><html><head><meta charset="utf-8"/><title></title><script>window.onload = function(){var oDiv = document.getElementById("div1");oDiv.style.color = "red";}</script></head><body><div id="div1">JavaScript</div></body></html>
分析:window.onload = function() {...}
上面表示在整个页面加载完成后执行得代码块!
浏览器是从上到下解析一个页面的,这个例子的JavaScript代码在HTML代码的上面,如果没有window.onload,浏览器解析到document.getElementById(“div1”)就会报错,因为它不知道id为div1的元素究竟是谁!
2. getElementsByTagName()
该方法是通过标签名来选中元素
语法document.getElementsByTagName("标签名")
该方法获取的是多个元素,即合集(所以该方法中用Elements)。
例:
<!DOCTYPE html><html><head><meta charset="utf-8"/><title></title><script>window.onload = function (){var oUl = document.getElementById("list");var oLi = oUl.getElementsByTagName("li");oLi[2].style.color = "red"}</script></head><body><ul id="list"><li>HTML</li><li>CSS</li><li>JAVASCRIPT</li><li>JQUERY</li><li>VUE.JS</li></ul></body></html>
分析:
getElementsByTagName()该方法获取的是一个数组,如果想要获得某一个元素,则可以使用数组下标的形式获取。
准确的说,该方法获取的是一个“类数组”(也叫伪数组),因为该类数组只能用到两点(两个方法):length属性和下标形式。
3. getElementsByClassName()
该方法是通过class来选中元素!
语法:document.getElementsByClassName("类名")
该方法获取的是一个类数组!所以element用复数
例:
<!DOCTYPE html><html><head><meta charset="utf-8"/><title></title><script>window.onload = function(){var oLi = document.getElementsByClassName("select");oLi[0].style.color = "red";}</script></head><body><ul id="list"><li>HTML</li><li>CSS</li><li class="select">JavaScript</li><li class="select">jQuery</li><li class="select">Vue.js</li></ul></body></html>
4. querySelector()和querySelectorAll()
这两个方法可以使用CSS选择器的语法来获取所需要的元素。
语法:document.querySelector("选择器")
该方法表示选取满足选择条件的第1个元素;document.querySelectorAll("选择器")
该方法表示选取满足条件的所有元素。
例:
<!DOCTYPE html><html><head><meta charset="utf-8"/><title></title><script>window.onload = function(){var oDiv = document.querySelectorAll(".test"); //获取class为test的所有元素oDiv[1].style.color = "red";}</script></head><body><div>JavaScript</div><div class="test">JavaScript</div><div class="test">JavaScript</div><div>JavaScript</div><div class="test">JavaScript</div></body></html>
5. getElementsByName()
对于表单元素来说,它有一个一般元素都没有的name属性。如果想要通过name属性来获取表单元素,则可以使用该方法来实现。
语法:document.getElementsByName("name名称")
该方法只用于表单元素,一般只用于单选按钮和复选框!
例:
<!DOCTYPE html><html><head><meta charset="utf-8"/><title></title><script>window.onload = function(){var oInput = document.getElementsByName("status");oInput[2].checked = true;}</script></head><body>你的最高学历:<label><input type="radio" name="status" value="本科" />本科</label><label><input type="radio" name="status" value="硕士" />硕士</label><label><input type="radio" name="status" value="博士" />博士</label></body></html>
6. document.title和document.body
一个页面只有一个title元素和一个body元素,这两个方法用于选取其对应元素。
例:
<!DOCTYPE html><html><head><meta charset="utf-8"/><title></title><script>window.onload = function(){document.title = "梦想是什么?";document.body.innerHTML = "<strong style='color:red'>梦想就是一种让你感到坚持就是幸福的东西。</strong>";}</script></head><body></body></html>
五,创建元素
在JavaScript中,使用createElement()来创建一个元素节点; 也可以使用createTextNode()来创建一个文本节点;
我们可以将创建的元素节点和文本节点“组装”成为我们平常所看到的“有文本内容的元素”。
这种方式又被称为“动态DOM操作”。
语法
var e1 = document.createElement("元素名"); //创建元素节点var txt = document.createTextNode("文本内容"); //创建文本节点e1.appendChild(txt); //把文本节点插入元素节点中e2.appendChild(e1); //把组装好的元素插入一寸照的元素中
A.appendChild(B)表示把B插入到A内部中去,也就是使得B成为A的子节点。
例:
<!DOCTYPE html><html><head><meta charset="utf-8"/><title></title><script>window.onload = function(){var oInput = document.createElement("input");oInput.id = "submit";oInput.type = "button";oInput.value = "提交";document.body.appendChild(oInput);}</script></head><body></body></html>
以上例子创建了一个带有属性的复杂元素:<input id="submit" type="button" value="提交"/>
六,插入元素
1. appendChild()
该方法是把一个新元素插入到父元素的内部子元素的末尾!
语法:A.appendChild(B);
其中A表示父元素,B表示动态创建好的新元素(即子元素)
例:
<!DOCTYPE html><html><head><meta charset="utf-8"/><title></title><script>window.onload = function(){var oBtn = document.getElementById("btn"); //获取id为btn的元素oBtn.onclick = function() //为该元素添加点击事件{var oUl = document.getElementById("list"); //获取id为list的元素var oTxt = document.getElementById("txt"); //获取id为txt的元素var textNode = document.createTextNode(oTxt.value); //创建一个文本节点,内容为oTxt文本框内容var oLi = document.createElement("li"); //创建一个li元素oLi.appendChild(textNode); //将文本节点插入至li元素中oUl.appendChild(oLi); //将li元素插入ul元素中去(该li元素显示在所有li元素之后)}}</script></head><body><ul id="list"><li>HTML</li><li>CSS</li><li>JavaScript</li></ul><input id="txt" type="text"/><input id="btn" type="button" value="插入"></body></html>
2. insertBefore()
该方法是将一个新元素插入到父元素的某一个子元素之前!
语法:A.insertBefore(B,ref);
说明:A表示父元素,B表示子元素,ref表示指定子元素(在该元素前插入子元素)。
例:
<!DOCTYPE html><html><head><meta charset="utf-8" /><title></title><script>window.onload = function(){var oBtn = document.getElementById("btn");oBtn.onclick = function(){var oUl = document.getElementById("list");var oTxt = document.getElementById("txt");var textNode = document.createElement(oTxt.value);var oLi = document.createElement("li");oLi.appendChild(textNode);oUl.insertBefore(oLi,oUl.firstElementChild);}}</script></head><body><ul id="list"><li>HTML</li><li>CSS</li><li>JavaScript</li></ul><input id="txt" type="text"/> <input id="btn" type="button" value="插入"></body></html>
七,删除元素
在JavaScript中,使用removeChild()方法来删除父元素下的某个子元素;
语法:A.removeChild(B);
说明:A表示父元素,B表示父元素内部的某个子元素
例:
<!DOCTYPE html><html><head><meta charset="utf-8"/><title></title><script>window.onload = function(){var oBtn = document.getElementById("btn");oBtn.onclick = function(){var oUl = document.getElementById("list");oUl.removeChild(oUl.lastElementChild); //删除ul中最后一个li元素}}</script></head><body><ul id="list"><li>HTML</li><li>CSS</li><li>JavaScript</li><li>jQuery</li><li>Vue.js</li></ul><input id="btn" type"button" vaule="删除"/></body></html>
八,复制元素
在JavaScript中,可以使用cloneNode()方法来实现复制元素
语法:obj.cloneNode(bool);
说明:
参数obj表示被复制的元素;参数bool是一个布尔值
例:
<!DOCTYPE html><html><head><meta charset="utf-8"/><title></title><script>window.onload = function(){var oBtn = document.getElementById("btn");oBtn.onclick = function(){var oUl = document.getElementById("list");document.body.appendChild(oUl.cloneNode(1)); //在body中添加一个子元素,值为oUl的复制}}</script></head><body><ul id="list"><li>HTML</li><li>CSS</li><li>JavaScript</li></ul><input id="btn" type="button" value="复制"></body></html>
九,替换元素
在JavaScript中,可以使用replaceChild()方法来实现替换元素。
语法:A.replaceChild(new,old);
例:
<!DOCTYPE html><html><head><meta charset = "utf-8"/><title></title><script>window.onload = function (){var oBtn = document.getElementById("btn");oBtn.onclick = function(){//获取body中的第一个元素var oFirst = document.querySelector("body *:first-child");//获取2个文本框var oTag = document.getElementById("tag");var oTxt = document.getElementById("txt");//根据2个文本框的值来创建一个新节点var oNewTag = document.createElement(oTag.value);var oNewTxt = document.createElement(oTxt.value);oNewTag.appendChild(oNewTxt);document.body.replaceChild(oNewTag,oFirst);}}</script></head><body><p>JavaScript</p><hr/>输入标签:<input id="tag" type="text" />输入内容:<input id="txt" type="text" /><input id="btn" type="button" value="替换"></body></html>
