05 javascript知识点---BOM和DOM
1.DOM简单学习(为了满足案例要求)
功能:控制html文档的内容
获取页面标签(元素)对象:Element
document.getElementById("id值"):通过元素的id获取元素对象
操作Element对象:
1. 修改属性值:
1. 明确获取的对象是哪一个?
2. 查看API文档,找其中有哪些属性可以设置
2. 修改标签体内容:
* 属性:innerHTML
1. 获取元素对象
2. 使用innerHTML属性修改标签体内容
2.事件简单学习
功能: 某些组件被执行了某些操作后,触发某些代码的执行。
如何绑定事件
1. 直接在html标签上,指定事件的属性(操作),属性值就是js代码
1. 事件:onclick--- 单击事件
2. 通过js获取元素对象,指定事件属性,设置一个函数(掌握)
案例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>电灯开关</title> </head> <body> <img src="img/off.gif" id="light"> <script> var light=document.getElementById("light"); var flag=false; light.onclick=fun; function fun() { if(!flag){ light.src="img/on.gif"; flag=true; }else { light.src="img/off.gif"; flag=false; } } </script> </body> </html>
3.BOM:
(1)概念:Browser Object Model 浏览器对象模型
* 将浏览器的各个组成部分封装成对象。
(2)组成:
* Window:窗口对象
* Navigator:浏览器对象(基本不用)
* Screen:显示器屏幕对象(基本不用)
* History:历史记录对象
* Location:地址栏对象
(3)Window:窗口对象
1. 创建
2. 方法
1. 与弹出框有关的方法:
<1>alert() 显示带有一段消息和一个确认按钮的警告框。
<2>confirm() 显示带有一段消息以及确认按钮和取消按钮的对话框。
* 如果用户点击确定按钮,则方法返回true
* 如果用户点击取消按钮,则方法返回false
2. 与打开关闭有关的方法:
close() 关闭浏览器窗口。
谁调用我 ,我关谁
open() 打开一个新的浏览器窗口
* 返回新的Window对象
3. 与定时器有关的方式
setTimeout() 在指定的毫秒数后调用函数或计算表达式。
* 参数:
1. js代码或者方法对象
2. 毫秒值
* 返回值:唯一标识,用于取消定时器
clearTimeout() 取消由 setTimeout() 方法设置的 timeout。
setInterval() 按照指定的周期(以毫秒计)来调用函数或计算表达式。
clearInterval() 取消由 setInterval() 设置的 timeout。
案例:轮播图
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>轮播图</title> </head> <body> <img src="img/banner_1.jpg" width="100%" id="img_banner"> <script> var number=1; function changepic() { if(number<4){ var img=document.getElementById("img_banner"); img.src="img/banner_"+number+".jpg"; number++; }else { number=1; } } setInterval(changepic,2000); //注意:参数1为函数名,不能加() </script> </body> </html>
(4) Location:地址栏对象
1. 创建(获取):
1. window.location
2. location
2. 方法:
* reload() 重新加载当前文档。刷新
3. 属性
* href 设置或返回完整的 URL。
案例:自动跳转回首页
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>自动跳转首页</title> <style> span{ color: red; } p{ text-align: center; } </style> <script> var number=5; function timeshow() { if(number>0){ number--; var span_number=document.getElementById("span_number"); //获取span标签 span_number.innerHTML=number+""; }else { //跳转到首页 location.href="https://hao.360.com/?a1004" } } setInterval(timeshow,1000); </script> </head> <body> <p><span id="span_number">5</span>秒后,自动跳转到首页</p> </body> </html>
4.DOM:
概念: Document Object Model 文档对象模型
将标记语言文档的各个组成部分,封装为对象。可以使用这些对象,对标记语言文档进行CRUD的动态操作
W3C DOM 标准被分为 3 个不同的部分:
* 核心 DOM - 针对任何结构化文档的标准模型
(1)Document:文档对象(掌握)
(2)Element:元素对象(掌握)
(3)Attribute:属性对象
(4)Text:文本对象
(5) Comment:注释对象
(6) Node:节点对象,其他5个的父对象
* XML DOM - 针对 XML 文档的标准模型
* HTML DOM - 针对 HTML 文档的标准模型
* 核心DOM模型:
(1) Document:文档对象
1. 创建(获取):在html dom模型中可以使用window对象来获取
1. window.document
2. document
2. 方法:
1. 获取Element对象:
1. getElementById() : 根据id属性值获取元素对象。id属性值一般唯一
2. getElementsByTagName():根据元素名称获取元素对象们。返回值是一个数组
3. getElementsByClassName():根据Class属性值获取元素对象们。返回值是一个数组
4. getElementsByName(): 根据name属性值获取元素对象们。返回值是一个数组
2. 创建其他DOM对象:
createAttribute(name)
createComment()
createElement()
createTextNode()
3. 属性
* Element:元素对象
1. 获取/创建:通过document来获取和创建
2. 方法:
1. removeAttribute():删除属性
2. setAttribute():设置属性
(2)Node:节点对象,其他5个的父对象
* 特点:所有dom对象都可以被认为是一个节点
* 方法:
* CRUD dom树:
* appendChild():向节点的子节点列表的结尾添加新的子节点。
* removeChild() :删除(并返回)当前节点的指定子节点。
* replaceChild():用新节点替换一个子节点。
* 属性:
* 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> <input type="text" id="id" placeholder="请输入编号"> <input type="text" id="name" placeholder="请输入姓名"> <input type="text" id="gender" placeholder="请输入性别"> <input type="button" value="添加" id="btn_add"> </div> <table id="table"> <caption>学生信息表</caption> <tr> <th>编号</th> <th>姓名</th> <th>性别</th> <th>操作</th> </tr> <tr> <td>1</td> <td>令狐冲</td> <td>男</td> <td><a href="javascript:void(0);" onclick="delTr(this)">删除</a></td> </tr> <tr> <td>2</td> <td>任我行</td> <td>男</td> <td><a href="javascript:void(0);" onclick="delTr(this)">删除</a></td> </tr> <tr> <td>3</td> <td>岳不群</td> <td>?</td> <td><a href="javascript:void(0);" onclick="delTr(this)">删除</a></td> </tr> </table> <script> //1.获取按钮 document.getElementById("btn_add").onclick=function(){ //2.获取文本内容 var id = document.getElementById("id").value; var name = document.getElementById("name").value; var gender = document.getElementById("gender").value; //方法一 var table = document.getElementById("table"); table.innerHTML+="<tr>\n" + " <td>"+id+"</td>\n" + " <td>"+name+"</td>\n" + " <td>"+gender+"</td>\n" + " <td><a href=\"javascript:void(0);\" onclick=\"delTr(this)\">删除</a></td>\n" + " </tr>" //方法二 // //3.创建td // 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(gender); // td_gender.appendChild(text_gender); // // var td_delete = document.createElement("td"); // var del_a = document.createElement("a"); // del_a.setAttribute("href","javascript:void(0);"); // del_a.setAttribute("onclick","delTr(this)"); // var text_a = document.createTextNode("删除"); // del_a.appendChild(text_a); // td_delete.appendChild(del_a); // // //4.将td添加到tr上 // var tr = document.createElement("tr"); // tr.appendChild(td_id); // tr.appendChild(td_name); // tr.appendChild(td_gender); // tr.appendChild(td_delete); // var table =document.getElementById("table"); // table.appendChild(tr); }; //删除tr function delTr(obj) { //获取父节点 var table = obj.parentNode.parentNode.parentElement; var tr = obj.parentNode.parentNode; table.removeChild(tr); } </script> </body> </html>
HTML DOM
1. 标签体的设置和获取:innerHTML
2. 使用html元素对象的属性
3. 控制元素样式
1. 使用元素的style属性来设置
如:
//修改样式方式1
div1.style.border = "1px solid red";
div1.style.width = "200px";
//font-size--> fontSize
div1.style.fontSize = "20px";
2. 提前定义好类选择器的样式,通过元素的className属性来设置其class属性值。
5.事件监听机制:
概念:某些组件被执行了某些操作后,触发某些代码的执行。
事件:某些操作。如: 单击,双击,键盘按下了,鼠标移动了
事件源:组件。如: 按钮 文本输入框...
监听器:代码。
注册监听:将事件,事件源,监听器结合在一起。 当事件源上发生了某个事件,则触发执行某个监听器代码。
* 常见的事件:
1. 点击事件:
1. onclick:单击事件
2. ondblclick:双击事件
2. 焦点事件
1. onblur:失去焦点
2. onfocus:元素获得焦点。
3. 加载事件:
1. onload:一张页面或一幅图像完成加载。
4. 鼠标事件:
1. onmousedown 鼠标按钮被按下。
2. onmouseup 鼠标按键被松开。
3. onmousemove 鼠标被移动。
4. onmouseover 鼠标移到某元素之上。
5. onmouseout 鼠标从某元素移开。
5. 键盘事件:
1. onkeydown 某个键盘按键被按下。
2. onkeyup 某个键盘按键被松开。
3. onkeypress 某个键盘按键被按下并松开。
6. 选择和改变
1. onchange 域的内容被改变。
2. onselect 文本被选中。
7. 表单事件:
1. onsubmit 确认按钮被点击。
2. onreset 重置按钮被点击。
案例:表格全选
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>表格全选</title> <style> table{ border: 1px solid; width: 500px; margin-left: 30%; } td,th{ text-align: center; border: 1px solid; } div{ margin-top: 10px; margin-left: 30%; } .over{ background-color: pink; } .out{ background-color: white; } </style> <script> window.onload=function () { //全选 document.getElementById("selectAll").onclick=function () { //获取所有的checkbox var cbs = document.getElementsByName("cb"); for (var i = 0; i <cbs.length ; i++) { cbs[i].checked=true; } }; //全不选 document.getElementById("unSelectAll").onclick=function () { //获取所有的checkbox var cbs = document.getElementsByName("cb"); for (var i = 0; i <cbs.length ; i++) { cbs[i].checked=false; } }; //反选 document.getElementById("selectRev").onclick=function () { //获取所有的checkbox var cbs = document.getElementsByName("cb"); for (var i = 0; i <cbs.length ; i++) { cbs[i].checked=!(cbs[i].checked); } }; //给所有tr绑定鼠标移动事件 var trs =document.getElementsByTagName("tr"); for (var i = 0; i <trs.length ; i++) { trs[i].onmouseover=function () { this.className="over"; }; trs[i].onmouseout=function () { this.className="out"; } } } </script> </head> <body> <table> <caption>学生信息表</caption> <tr> <th><input type="checkbox" name="cb"></th> <th>编号</th> <th>姓名</th> <th>性别</th> <th>操作</th> </tr> <tr> <td><input type="checkbox" name="cb"></td> <td>1</td> <td>令狐冲</td> <td>男</td> <td><a href="javascript:void(0);">删除</a></td> </tr> <tr> <td><input type="checkbox" name="cb"></td> <td>2</td> <td>任我行</td> <td>男</td> <td><a href="javascript:void(0);">删除</a></td> </tr> <tr> <td><input type="checkbox" name="cb"></td> <td>3</td> <td>岳不群</td> <td>?</td> <td><a href="javascript:void(0);">删除</a></td> </tr> </table> <div> <input type="button" id="selectAll" value="全选"> <input type="button" id="unSelectAll" value="全不选"> <input type="button" id="selectRev" value="反选"> </div> </body> </html>
效果图: