DOM的基础学习
概念
- Document Object Model 文档对象模型
- 将标记语言文档的各个组成部分,封装为对象。可以使用这些对象,对标记语言文档进行CRUD的动态操作
W3C DOM 标准被分为 3 个不同的部分:
- Core DOM - 所有文档类型的标准模型
- Document:文档对象
- Element:元素对象
- Attribute:属性对象
- Text:文本对象
- Comment:注释对象
- Node:结点对象,其他5个的父对象
- XML DOM - XML 文档的标准模型
- HTML DOM - HTML 文档的标准模型
Core DOM 模型
- Document:文档对象
- 创建(获取):在HTML dom模型中可以使用window对象来获取
- window.document
- document
- 方法:
- 获取Element对象:
- getElementById() 查找具有指定的唯一 ID 的元素。id属性值一般唯一
- getElementsByTagName() 返回所有具有指定名称的元素节点。返回值是一个数组
- getElementsByClassName():根据Class属性值获取元素对象们。返回值是一个数组
- getElementsByName() 返回带有指定名称的对象集合。返回值也是一个数组。
- 创建其他DOM对象
- createAttribute(name) 创建拥有指定名称的属性节点,并返回新的 Attr 对象。
- createComment() 创建注释节点。
- createElement() 创建元素节点。
- createTextNode() 创建文本节点。
- 获取Element对象:
- 属性
- 创建(获取):在HTML dom模型中可以使用window对象来获取
- Element:元素对象
- 获取:通过document对象类获取和创建
- 方法:
- removeAttribute(“属性名称”) 删除指定的属性。
- setAttribute() 添加新属性。
- Node:结点对象,其他5个的父对象
- 特点:所有dom对象都可以被认为是一个节点
- 方法:
- CRUD dom树
- appendChild() 向节点的子节点列表的结尾添加新的子节点。
- removeChild() 删除(并返回)当前节点的指定子节点。
- replaceChild() 用新节点替换一个子节点。
- CRUD dom树
- 属性:
- parentNode 返回元素的父节点
案例:动态表格
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>动态表格</title>
<style>
table{
border: 1px solid;
margin: auto;
width: 500px;
}
td,th{
text-align: center;
border: 1px solid;
}
div{
text-align: center;
margin: 50PX;
}
</style>
</head>
<body>
<div>
ID:<input type="number" id="ID" placeholder="请输入编号">
名字:<input type="text" id="name" placeholder="请输入你的姓名">
性别:<input type="radio" id="male" value="男" name="gender">男<input type="radio" id="female" value="女" name="gender">女
<input type="button" value="添加" id="btn_add">
</div>
<table id="tab">
<caption>学生信息表</caption>
<tr>
<th>编号</th><th>姓名</th><th>性别</th><th>操作</th>
</tr>
</table>
<script>
/**
* 分析
* 1. 添加:
* 1. 给添加按钮绑定单击事件
* 2. 获取文本框内容
* 3. 创建 tr,td 设置特点文本框的内容
* 4. 将td添加到tr中
* 6. 获取table,将tr添加到table中
* 2. 删除
* 1. 确定点击的是哪一个超链接
*
* 2. 怎么删除?
*/
var btn_add = document.getElementById("btn_add");
btn_add.onclick=function (){
var id=document.getElementById("ID").value;
var name=document.getElementById("name").value;
var gender=document.getElementsByName("gender");
var gendervalue;
for (var i=0;i<gender.length;i++){
if(gender[i].checked){
gendervalue=gender[i].value;
break;
}
}
var td_id=document.createElement("td");
var text_id = document.createTextNode(id);
td_id.appendChild(text_id);
var td_name=document.createElement("td");
var text_name = document.createTextNode(name);
td_name.appendChild(text_name);
var td_gender=document.createElement("td");
var text_gender = document.createTextNode(gendervalue);
td_gender.appendChild(text_gender);
var td_caozuor=document.createElement("td");
var btn_caozuor = document.createElement("input")
btn_caozuor.value="删除";
btn_caozuor.id="btn_del"
btn_caozuor.type="button";
btn_caozuor.onclick=function (){//这里面的this就是接受的对象
var table = this.parentNode.parentNode.parentNode;
var tr = this.parentNode.parentNode;
table.removeChild(tr);
}
// function deltr (obj){//这里面的this就是接受的对象
// var table = obj.parentNode.parentNode.parentNode;
// var tr = obj.parentNode.parentNode;
// table.removeChild(tr);
// }
// btn_caozuor.setAttribute("onclick","deltr(this);")
td_caozuor.appendChild(btn_caozuor);
//4. 创建tr
var eletr=document.createElement("tr");
eletr.appendChild(td_id);
eletr.appendChild(td_name);
eletr.appendChild(td_gender);
eletr.appendChild(td_caozuor);
var tab = document.getElementById("tab");
tab.appendChild(eletr);
}
</script>
</body>
</html>
HTML DOM
-
标签体的设置和获取:innerHTML
- 使用innerHTML来改进案例:动态表格的代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>HTMLDOM</title> <style> table{ border: 1px solid; margin: auto; width: 500px; } td,th{ text-align: center; border: 1px solid; } div{ text-align: center; margin: 50PX; } </style> </head> <body> <!--<div id="d1">--> <!-- div1--> <!--</div>--> <!--<script>--> <!-- // var div = document.getElementById("d1");--> <!-- // var innerHTML = div.innerHTML;//获取标签体内容--> <!-- // // alert(innerHTML);--> <!-- //--> <!-- // //div标签中替换一个文本输入框--> <!-- // // div.innerHTML="<input type='text'>";--> <!-- // //div标签中追加一个文本输入框--> <!-- // div.innerHTML+="<input type='text'>";--> <!--</script>--> <div> ID:<input type="number" id="ID" placeholder="请输入编号"> 名字:<input type="text" id="name" placeholder="请输入你的姓名"> 性别:<input type="radio" id="male" value="男" name="gender">男<input type="radio" id="female" value="女" name="gender">女 <input type="button" value="添加" id="btn_add"> </div> <table id="tab"> <caption>学生信息表</caption> <tr> <th>编号</th><th>姓名</th><th>性别</th><th>操作</th> </tr> </table> <script> /** * 分析 * 1. 添加: * 1. 给添加按钮绑定单击事件 * 2. 获取文本框内容 * 3. 创建 tr,td 设置特点文本框的内容 * 4. 将td添加到tr中 * 6. 获取table,将tr添加到table中 * 2. 删除 * 1. 确定点击的是哪一个超链接 * * 2. 怎么删除? */ var btn_add = document.getElementById("btn_add"); // btn_add.οnclick=function (){ // var id=document.getElementById("ID").value; // var name=document.getElementById("name").value; // var gender=document.getElementsByName("gender"); // var gendervalue; // for (var i=0;i<gender.length;i++){ // if(gender[i].checked){ // gendervalue=gender[i].value; // break; // } // } // // var td_id=document.createElement("td"); // var text_id = document.createTextNode(id); // td_id.appendChild(text_id); // var td_name=document.createElement("td"); // var text_name = document.createTextNode(name); // td_name.appendChild(text_name); // var td_gender=document.createElement("td"); // var text_gender = document.createTextNode(gendervalue); // td_gender.appendChild(text_gender); // var td_caozuor=document.createElement("td"); // var btn_caozuor = document.createElement("input") // btn_caozuor.value="删除"; // btn_caozuor.id="btn_del" // btn_caozuor.type="button"; // btn_caozuor.οnclick=function (){//这里面的this就是接受的对象 // var table = this.parentNode.parentNode.parentNode; // var tr = this.parentNode.parentNode; // table.removeChild(tr); // } // // function deltr (obj){//这里面的this就是接受的对象 // // var table = obj.parentNode.parentNode.parentNode; // // var tr = obj.parentNode.parentNode; // // table.removeChild(tr); // // } // // btn_caozuor.setAttribute("onclick","deltr(this);") // td_caozuor.appendChild(btn_caozuor); // // // //4. 创建tr // var eletr=document.createElement("tr"); // eletr.appendChild(td_id); // eletr.appendChild(td_name); // eletr.appendChild(td_gender); // eletr.appendChild(td_caozuor); // var tab = document.getElementById("tab"); // tab.appendChild(eletr); // // // // } //使用innerHTML添加,使得代码更加简洁 document.getElementById("btn_add").onclick=function () { //2. 获取文本框的内容 var id = document.getElementById("ID").value; var name = document.getElementById("name").value; var gender=document.getElementsByName("gender"); var gendervalue; for (var i=0;i<gender.length;i++){ if(gender[i].checked){ gendervalue=gender[i].value; break; } } var table = document.getElementsByTagName("table")[0]; //追加一行 table.innerHTML+="<tr>\n" + " <td>"+id+"</td>\n" + " <td>"+name+"</td>\n" + " <td>"+gendervalue+"</td>\n" + " <td><input type=\"button\" οnclick=\"deltr(this);\" value=\"删除\"></td>\n" + "</tr>"; } function deltr(obj){ var table = obj.parentNode.parentNode.parentNode; var tr = obj.parentNode.parentNode; table.removeChild(tr); } </script> </body> </html>
-
使用html元素对象的属性
- 过多需要自行查阅API文档
- 链接:https://www.w3school.com.cn/js/js_htmldom.asp
-
控制样式
-
使用元素的style属性来设置
如:
<script> var d1 = document.getElementById("d1"); d1.onclick=function (){ //修改样式方法一 d1.style.border="1px solid red"; d1.style.width="200px"; //font-size --> fontSize d1.style.fontSize="50px"; } </script>
-
提前定义好类选择器的样式,通过元素的className属性来设置class属性值。
-
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>HTMLDOM——控制样式</title>
<style>
.div2{
border:1px solid green;
width: 400px;
height: 400px;
}
</style>
</head>
<body>
<div id="d1">
div1
</div>
<div id="d2">
div2
</div>
<script>
var d1 = document.getElementById("d1");
d1.onclick=function (){
//修改样式方法一
d1.style.border="1px solid red";
d1.style.width="200px";
//font-size --> fontSize
d1.style.fontSize="50px";
}
var d2=document.getElementById("d2");
d2.onclick=function (){
d2.className="div2";
}
</script>
</body>
</html>