目录
一,DOM与bom的区别:
二,DOM树
1. DOM的概念:Document Object Model(文档对象模型)
2. DOM树的概念:
DOM树中的节点类型和节点关系
三,element
1.常用属性
2.常用方法
三,具体案例
1.实现图片轮换的效果:
2.操作表格
一,DOM与bom的区别:
- DOM是文档对象模型,用来获取或设置浏览器的属性,例如:获取或者设置input表单value
- BOM是浏览器对象模型,用来获取或设置浏览器的属性、行为,例如新建窗口、获取屏幕分 辨率、浏览器版号等。
二,DOM树
1. DOM的概念:Document Object Model(文档对象模型)
2. DOM树的概念:
DOM树中的节点类型和节点关系
- 文档(document):一个网页就是一个文档。
- 元素(element):网页中的所有标签都是元素,元素也能够看成是对象。
- 节点(node):网页中的内容都是节点:标签,文本。
- root:跟。
document就是跟节点。
上级与下级之间就是父子关系 ,简而言之:上级节点就是下级节点的父节点。相反,下级节点就是上级节点的字节点。同级别的节点称为“兄弟关系”。
三,element
1.常用属性
Element.children | 获取该元素中的所有子元素标签 |
Element.childElementCount | 获取该元素中的子元素的个数 |
Element.firstElementChild | 获取第一个子元素 |
Element.lastElementChild | 获取最后一个子元素 |
Element.nextElementSibling | 获得下一个相邻元素 |
Element.previousElementSibling | 获得上一个相邻元素 |
Element.parentElement | 获得父级元素 |
注意:网页中最大父级元素(element)是document
在获取父级元素或者子级元素的方式有很多,可以根据自己的习惯来,代码示例:
<!DOCTYPE html>
<html lang=\"en\">
<head>
<meta charset=\"UTF-8\">
<title>text01</title>
</head>
<body>
<div id=\"div\"><!-- 编辑块状标签 -->
<img src=\"imgs/3.jpg\" alt=\"此图无效!\">
<img id=\"img\" src=\"imgs/2.gif\" alt=\"此图无效!\">
<img src=\"imgs/4.jpg\" alt=\"此图无效!\">
</div>
<script type=\"text/javascript\">
//打印父级元素
console.log(img.parentElement); //打印会输出<div></div>
//给img标签的父级标签设置一个背景颜色:
img.parentElement.style.background = \"red\"; //将div块状标签的背景颜色设置为红色
//如何查询一个标签的子元素:
console.log(div.children); //将会得到子元素的集合
//如何拿到一个标签的子元素的个数:
console.log(div.childElementCount);
//上面一行代码将会得到子元素的个数,当然既然div.children得到是关于子元素的集合,
//那么就能够使用div.children.length拿到集合的长度,也就是子元素的个数
//如何得到元素的第一个子元素:
console.log(div.firstElementChild);
//同理,拿到最后一个:
console.log(div.lastElementChild);
//拿到上一个相邻的元素
console.log(img.previousElementSibling)
//拿到下一个相邻的元素
console.log(img.nextElementSibling)
</script>
</body>
</html>
2.常用方法
document.createElement(TagName) | 根据标签名创建新的元素 |
Element.getAttribute(Name) | 根据标签中的属性名获取属性值 |
Element.setAttribute(Name) | 根据标签中的属性名设置属性值 |
Element.appendChild(Node) | 采用末尾追加方式插入节点 |
Element.insertBefore(Node1,Node2) | 将Node1插入在element中的子元素Node2的前面,Node2可以为null值,也能够实现末尾插入 |
Element.after(Node) | 在元素后面增加节点 |
Element.before(Node) | 在元素前面增加节点 |
Element.cloneNode(boolean) | 复制节点(是否复制子节点) |
Element.removeChild(Node) | 移除子节点 |
Element.replaceChild(Node1,Node2) | 用node1节点替换node2节点 |
示例代码:
<!DOCTYPE html>
<html lang=\"en\">
<head>
<meta charset=\"UTF-8\">
<title>常用方法</title>
</head>
<body>
<div id=\"div\">
<!-- 编辑块状标签 -->
<img src=\"imgs/1.gif\" alt=\"\">
<img id=\"img\" src=\"imgs/2.gif\" alt=\"\">
<img src=\"imgs/3.gif\" alt=\"\">
</div>
<script>
//创建增加图片的函数
function add1() {
//创建一个图片标签
var i = document.createElement(\"img\");
//设置标签上的属性
//i.setAttribute(\"src\",\"img/4.gif\")建议大家使用,因为这种方式通用于所有的属性
i.src = \"img/4.gif\";
//把图片标签放到div中
div.appendChild(i); //在节点的末尾增加节点
}
//其实在很多时候我们通常把node和element看成一个东西
//创建删除图片的函数
function del2() {
//每点击一次 删除最后一张
var i = div.lastElementChild;
//删除 通过父元素 来删除 子元素
div.removeChild(i); //删除
}
//创建复制图片的函数
function copy3() {
//复制节点
var d = div.cloneNode(true); //节点复制的时候将属性带过去了
//此时一定不要忘了将ID变了,以便确保元素的唯一性
// d.id=\"\"可以使用这个代码
d.setAttribute(\"id\", \"\");
//将元素加到body中
document.body.appendChild(d);
}
</script>
<button onclick=\"add1()\">增加一张图片</button>
<button onclick=\"del2()\">删除一张图片</button>
<button onclick=\"copy3()\">复制div</button>
</body>
</html>
三,具体案例
1.实现图片轮换的效果:
原理:
先获取需要更换的图片,然后传对应的图片名称进去,在a标签中调用换图的函数就行了。
<!DOCTYPE html>
<html>
<head>
<meta charset=\"utf-8\">
<title>作业一&实现图片轮换</title>
</head>
<body>
<script type=\"text/javascript\">
function change1(iname){//参数为图片的名字
var sa =document.getElementById(\"photo\");//根据元素的ID拿到img
sa.src=iname;//给sa对象增加图片,还使用sa.setAttribute(\"src\",iname)设置标签上的属性
}
</script>
<table width=\"360\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
<tr><td style=\"height: 190px;\">
<div id=\"apDiv1\"><!-- 定义一个块状标签,里面放五个跳转链接,当数字几被点击就跳转到哪一张图片 -->
<a href=\"javascript:change1(\'imgs/1.gif\')\">1</a><!-- 使用a标签调用js函数进行跳转 -->
<a href=\"javascript:change1(\'imgs/2.gif\')\">2</a>
<a href=\"javascript:change1(\'imgs/3.jpg\')\">3</a>
<a href=\"javascript:change1(\'imgs/4.jpg\')\">4</a>
<a href=\"javascript:change1(\'imgs/5.gif\')\">5</a>
</div>
<img src=\"imgs/1.gif\" alt=\"图片无效\" id=\"photo\"/></td><!-- 定义图片标签,设置ID以便函数设置标签属性 -->
</tr>
</table>
</body>
</html>
2.操作表格
操作表格的方法:
- table表格对象,在DOM结构中table的子节点是tbody
table.rows 返回表格中行的数组 table.insertrow(i) 在表格第i行的位置插入一行 table.deleterow(i) 在表格第i行的位置删除一行 row.cells 返回该行中包括的所有列的数组 row.rowindex 返回该行在表格中的位置 row..insertcell(i) 在该行第i列的位置插入一列 row..deletecell(i) 在该行第i列的位置删除一列 cell.cellindex 返回该列在行中的位置 cell.align 设置或返回单元格内部数据的水平排里排列方式 cell.className 设置护着返回元素的class属性 cell.innerHTML 设置或者返回单元格的标签内容 -
案例:订单得到案例,实现以下功能(删除订单,确认订单,修改订单,增加订单)
<!DOCTYPE html> <html> <head> <meta charset=\"utf-8\"> <title>操作表格</title> <!-- 需要实现的操作: 1.增加用户 2.删除用户 3.修改用户 4.确认用户 --> </head> <body> <script type=\"text/javascript\"> var i = 2; //定义全局变量行数,当前已经存在两行 //创建增加的用户的函数 function addrow() { //先获取要操作的表格 var mytable = document.getElementById(\"order\"); /* 获取表格的最后一行的下标(注意咱们拿表格的下标的时候一定一定要注意的一个点, 拿到rows只是的得到表格的行数,还需要再次基础上减一) */ var rindex = mytable.rows.length - 1; //在表格最后一行的位置插入一行 var newrow = mytable.insertRow(rindex); //并给新增加的行设置ID以确保其唯一性(注意很多人到这个地方就会忽略这个点) newrow.id = \'row\' + i; //将其ID设置为row+i i++; //设置完ID后表示已经新增了一行,就需要在此基础上将i增加1 //在新建的行里面增加列(四列) var r0 = newrow.insertCell(0); //第0列(文本框) r0.innerHTML = \"小美\"; var r1 = newrow.insertCell(1); //第1列(文本框) r1.innerHTML = \"小美\"; var r2 = newrow.insertCell(2); //第2列(文本框) r2.innerHTML = \"小美\"; var r3 = newrow.insertCell(3); //第3列(两个按钮->确定和删除) r3.innerHTML = \"<input type=\'button\' value=\'删除\' onclick=\\\"delrow(\'\" + newrow.id + \"\')\\\" /> < input type = \'button\' value = \'确定\' onclick = \\\"qdrow(\'\" + newrow.id + \"\')\\\" / > \"; } //创建确定的函数 function qdrow(rid) { //参数为需要确定的行的ID //通过行ID获取需要确定的行 var row = document.getElementById(rid); //获取改行得到所有列 var cells = row.cells; //第0列 //获取第0列文本框的值 var vc0 = cells[0].firstChild.value; /* 注意咱们在这里使用的firstchild和lastchild是没有区别的, 因为该行中只有一个子节点,所有我们采用两种方法都行*/ //将文本框的值赋给对应的列 cells[0].innerHTML = vc0; //第1列 //获取第1列文本框的值 var vc1 = cells[1].firstChild.value; //将文本框的值赋给对应的列 cells[1].innerHTML = vc1; //第2列 //获取第2列文本框的值 var vc2 = cells[2].firstChild.value; //将文本框的值赋给对应的列 cells[2].innerHTML = vc2; //第3列 //将第三列的第二个确定的按钮改为修改 cells[3].lastChild.value = \'修改\'; //因为该列只有两个子节点所以我们采用lastchild的方法 /* 注意:我们在将其外壳换掉的同时也要将其内在换掉,所以咱们能够使用setattribute函数来设置其属性onclick */ cells[3].lastChild.setAttribute(\"onclick\", \"updaterow(\'\" + rid + \"\')\"); } //创建删除用户的方法 function delrow(rid) { //先获取要操作的表格 var mytable = document.getElementById(\"order\"); //通过ID获取需要删除的行对象 var row = document.getElementById(rid); //在通过行获取需要删除行的下标 var rindex = row.rowIndex; //跟行下标删除行 mytable.deleteRow(rindex); } //创建修改的函数 function updaterow(rid) { //通过行ID获取需要确定的行 var row = document.getElementById(rid); //获取改行得到所有列 var cells = row.cells; //第0列 //获取第0列文本框的值 var vc0 = cells[0].innerHTML; //将获取到的第0列的赋值给文本框,并将文本框在赋值给第0个单元格 cells[0].innerHTML = \"<Input type=\'text\' value=\'\" + vc0 + \"\'/>\"; //第1列 //获取第1列文本框的值 var vc1 = cells[1].innerHTML; //将获取到的第1列的赋值给文本框,并将文本框在赋值给第1个单元格 cells[1].innerHTML = \"<Input type=\'text\' style=\'width:20px\' value=\'\" + vc1 + \"\'/>\"; //第2列 //获取第2列文本框的值 var vc2 = cells[2].innerHTML; //将获取到的第2列的赋值给文本框,并将文本框在赋值给第2个单元格 cells[2].innerHTML = \"<Input type=\'text\' style=\'width:20px\' value=\'\" + vc2 + \"\'/>\"; //第3列 //点击修改后,再将第三列第二个按钮的内容由修改改为确定 cells[3].lastChild。 value = \'确定\'; //再次调用确定的函数 cells[3].lastChild.setAttribute(\"onclick\", \"qdrow(\'\" + rid + \"\')\"); } </script> <table border=\"1\" cellspacing=\"0\" id=\"order\" align=\"center\"> <!-- 编辑表头 --> <tr bgcolor=\"bisque\"> <!-- 设置表头的背景颜色 --> <th>用户名字</th> <th>用户性别</th> <th>用户年龄</th> <th>操作</th> </tr> <!-- 编辑第一行 --> <tr id=\"row1\"> <td>小明</td> <td>男</td> <td>23</td> <td><input type=\"button\" value=\"删除\" onclick=\"delrow(\"row1\")\" /></td> </tr> <tr id=\"row1\"> <td colspan=\"4\" align=\"center\"><input type=\"button\" value=\"增加用户\" onclick=\"addrow()\" /></td> </tr> </table> </body> </html>
在这个案例中我们,还有很多我们需要完善的点还有很多,比如,将案例动态化,实现动态传值,并对一些输入框做一些规则判定(使用正则),还能增加的功能有修改表格的属性,感兴趣的小伙伴可以练练手。
来源:https://blog.csdn.net/m0_67376124/article/details/123230708
本站部分图文来源于网络,如有侵权请联系删除。