一、Dom介绍
什么是Dom?
DOM:文档对象模型。DOM 为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构。目的其实就是为了能让js操作html元素而制定的一个规范。
DOM就是由节点组成的。
-
元素节点:HMTL标签。
-
文本节点:标签中的文字(比如标签之间的空格、换行)
-
属性节点::标签的属性。
-
Dom能做些什么?
-
找对象(元素节点)
-
设置元素的属性值
-
设置元素的样式
-
动态创建和删除元素
-
事件的触发响应:事件源、事件、事件的驱动程序
-
二、元素节点的操作相关
元素节点的获取
document.getElementById() 根据Id获取元素节点
1 <div id="div1"> 2 <p id="p1"> 3 我是第一个P</p> 4 <p id="p2"> 5 我是第二个P</p> 6 </div> 7 8 window.onload = function () { 9 var str = document.getElementById("p1").innerHTML; 10 alert(str); //弹出 我是第一个P 11 }
document.getElementsByName() 根据name获取元素节点
1 <div id="div1"> 2 <p id="p1"> 3 我是第一个P</p> 4 <p id="p2"> 5 我是第二个P</p> 6 <input type="text" value="请输入值" name="userName" /> 7 <input type="button" value="确定" onclick="fun1()"> 8 </div> 9 10 function fun1() { 11 var username = document.getElementsByName("userName")[0].value; 12 alert(username); //输出userName里输入的值 13 }
document.getElementsByTagName() 根据HTML标签名获取元素节点,注意getElements***的选择器返回的是一个NodeList对象,能根据索引号选择其中1个,可以遍历输出。
1 <div id="div1"> 2 <p id="p1"> 3 我是第一个P</p> 4 <p id="p2"> 5 我是第二个P</p> 6 </div> 7 8 window.onload = function () { 9 var str = document.getElementsByTagName("p")[1].innerHTML; 10 alert(str); //输出 我是第二个P,因为获取的是索引为1的P,索引从0开始 11 } 12 13 window.onload = function () { 14 var arr = document.getElementsByTagName("p"); 15 for (var i = 0; i < arr.length; i++) { 16 alert(arr[i].innerHTML); 17 } 18 } 19 20 window.onload = function () { 21 var node = document.getElementById("div1"); 22 var node1 = document.getElementsByTagName("p")[1]; //从获取到的元素再获取 23 alert(node1.innerHTML); 24 }
document.getElementsByClassName() 根据class获取元素节点
1 <div id="div1"> 2 <p id="p1" class="class1"> 3 我是第一个P</p> 4 <p id="p2"> 5 我是第二个P</p> 6 </div> 7 8 window.onload = function () { 9 var node = document.getElementsByClassName("class1")[0]; 10 alert(node.innerHTML); 11 }
元素节点的创建,插入与删除
document.createTextNode() 创建一个文本节点
1 <div id="div1"> 2 <p id="p1">我是第一个P</p> 3 <p id="p2">我是第二个P</p> 4 </div> 5 6 window.onload = function () { 7 var textNode = document.createTextNode("<p>我是一个javascript新建的节点</p>"); 8 document.getElementById("div1").appendChild(textNode); 9 }
document.createElement() 创建一个元素节点
1 <div id="div1"> 2 <p id="p1">我是第一个P</p> 3 <p id="p2">我是第二个P</p> 4 </div> 5 6 window.onload = function () { 7 var pNode = document.createElement("p"); 8 pNode.textContent = "新建一个P节点"; 9 document.getElementById("div1").appendChild(pNode); 10 }
appendChild & insertBefore 插入节点
1 <div id="div1"> 2 <p id="p1">我是第一个P</p> 3 </div> 4 5 window.onload = function () { 6 var pNode1 = document.createElement("p"); 7 pNode1.textContent = "insertBefore插入的节点"; 8 var pNode2 = document.createElement("p"); 9 pNode2.textContent = "appendChild插入的节点"; 10 document.getElementById("div1").appendChild(pNode2); 11 document.getElementById("div1").insertBefore(pNode1,document.getElementById("p1")); 12 } 13 // appendChild() 将一个节点插入到调用节点的最后面 14 // insertBefore() 接受两个参数,第一个为待插入的节点,第二个指明在哪个节点前面如 15 // 果不传入第二个参数,则跟appendChild一样,放在最后。
removeChild() & replaceChild() 删除和替换节点
<div id="div1"> <p id="p1">我是第一个P</p> <p id="p2">我是第二个P</p> </div> window.onload = function () { var div1 = document.getElementById("div1"); div1.removeChild(document.getElementById("p2")); } // 由父元素调用,删除一个子节点。注意是直接父元素调用,删除直接子元素才有效,删除孙 //子元素就没有效果了。
1 <div id="div1"> 2 <p id="p1">我是第一个P</p> 3 <p id="p2">我是第二个P</p> 4 </div> 5 6 window.onload = function () { 7 var div1 = document.getElementById("div1"); 8 var span1 = document.createElement("span"); 9 span1.textContent = "我是一个新建的span"; 10 div1.replaceChild(span1,document.getElementById("p2")); 11 } 12 //删除一个子节点,并用一个新节点代替它,第一个参数为新建的节点,第二个节点为被替换的 13 //节点