深圳的小梅沙真的治愈啊
Chapter 1. 事件 1.1 事件监听机制 事件监听机制,即某些组件被执行了某些操作后,触发某些代码的执行。
事件:某些操作。如:单击
事件源:组件。如:按钮、文本输入框
监听器:代码
注册监听:将事件、事件源、监听器结合在一起,当事件源上发生了某个事件,则触发执行某个监听器的代码。有两个方式,绑定事件:
方式一:直接在 HTML 标签上,指定事件的属性,其属性值即是 JS 代码
1 2 3 4 5 6 7 8 <body > <img id = "light" src = "img/off.gif" onclick = "fun();" > <script > function fun ( ){ alert ('我被点击了!' ); } </script > </body >
方式二:通过 JS 获取元素对象,指定事件属性,设置函数。
1 2 3 4 5 6 7 8 9 <body > <img id = "light" src = "img/off.gif" > <script > var light = document .getElementById ("light" ); light.onclick = function ( ){ alert ('我被点击了!' ); } </script > </body >
1.2 常见的事件 (一)点击事件:
onclick:单机事件ondblclick:双击事件(二)焦点事件:
onblur:失去焦点,常用于表单校验。onfocus:元素获得焦点。(三)加载事件:
onload:一张页面或一幅图像完成加载(四)鼠标事件:
onmousedown:鼠标按键被按下。定义方法时,定义一个形参接收 event 对象 event 对象的 button 属性,可以知道使用鼠标的哪个按键进行点击。onmouseup:鼠标按键被松开。onmousemove:鼠标被移动onmouseover:鼠标移动到某元素之上。onmouseout:鼠标从某个元素移开。(五)键盘事件:
onkeydown:某个键盘按键被按下onkeyup:某个键盘按键被松下onkeypress:某个键盘按键被按下并松开(六)选择和改变:
onchange:域的内容被改变。onselectet:用户选取文本时触发使用举例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > Title</title > <script > window .onload = function ( ){ document .getElementById ("username" ).onblur = function ( ){ alert ("失去焦点了..." ); } document .getElementById ("username" ).onmousedown = function (event ) { alert ("鼠标的第" + event.button + "个键点击了!" ); } document .getElementById ("username" ).onkeydown = function (event ) { if (event.keyCode == 13 ){ alert ("表单提交!" ); } } } </script > </head > <body > <input name = "username" id = "username" > </body > </html >
校验码图片更新:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > 注册</title > <script > window .onload = function ( ) { var img = document .getElementById ("checkCodeImg" ); img.onclick = function ( ) { var date = new Date ().getTime (); img.src = "/MyEEProjects/checkCodeServlet?" + date; } } </script > </head > <body > <img id = "checkCodeImg" src = "/MyEEProjects/checkCodeServlet" /> </body > </html >
(七)表单事件:
onsubmit :确认按钮被点击
可以阻止表单的提交,从而对填写的表单进行校验 当方法的返回值是 false,则阻止提交。 注意区分,Form 这一 DOM 对象有一方法 (不是事件):submit() ,JS能够通过这一 DOM 对象的方法,将表单进行提交。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > Title</title > <script > function checkForm ( ) { var flag = true ; return flag; } </script > </head > <body > <form action ="#" id = "form" onclick ="return checkForm();" > <input name = "username" id = "username" > <input type = "submit" value = "提交" > </form > </body > </html >
onreset:表单重置时触发
案例:表单全选 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 <!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% ; } .outBK { background-color : white; } .overBK { background-color : #bdedf9 ; } </style > <script > window .onload = function ( ) { document .getElementById ("selectAll" ).onclick = function ( ) { var cbs = document .getElementsByName ("cb" ); for (var i = 0 ; i < cbs.length ; i++){ cbs[i].checked = true ; } } document .getElementById ("unSelectAll" ).onclick = function ( ) { var cbs = document .getElementsByName ("cb" ); for (var i = 0 ; i < cbs.length ; i++){ cbs[i].checked = false ; } } document .getElementById ("selectRev" ).onclick = function ( ) { var cbs = document .getElementsByName ("cb" ); if (cbs[0 ].checked == true ) cbs[0 ].checked = false ; for (var i = 1 ; i < cbs.length ; i++){ cbs[i].checked = !cbs[i].checked ; } } document .getElementById ("firstCb" ).onclick = function ( ) { var cbs = document .getElementsByName ("cb" ); for (var i = 1 ; i < cbs.length ; i++){ cbs[i].checked = this .checked ; } } var trs = document .getElementsByTagName ("tr" ); for (var i = 0 ; i < trs.length ; i++){ trs[i].onmouseover = function ( ) { this .className = "overBK" ; } trs[i].onmouseout = function ( ) { this .className = "outBK" ; } } } </script > </head > <body > <table > <caption > To Do List</caption > <tr > <th > <input type ="checkbox" name = "cb" id = "firstCb" > </th > <th > 编号</th > <th > 名称</th > </tr > <tr > <td > <input type ="checkbox" name = "cb" > </td > <td > 1</td > <td > 写作业</td > </tr > <tr > <td > <input type ="checkbox" name = "cb" > </td > <td > 2</td > <td > 刷卷子</td > </tr > <tr > <td > <input type ="checkbox" name = "cb" > </td > <td > 3</td > <td > 看网课</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 >
案例:表单校验 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 function checkUsername ( ){ var username = document .getElementById ("username" ).value ; var reg_username = /^\w{6, 12}$/ ; var flag = reg_username.test (username); var s_username = document .getElementById ("s_username" ); if (flag) s_username.innerHTML = "<img width = '50%' src = 'img/correct.svg'/>" ; else s_username.innerHTML = "用户名格式有误" ; return flag; }function checkPassword ( ){ return flag; }window .onload = function ( ){ document .getElementById ("form" ).onsubmit = function ( ){ return checkUsername () && checkPassword; } document .getElementById ("username" ).onblur = checkUsername; document .getElementById ("password" ).onblur = checkPassword; }
Chapter 2. BOM-浏览器对象模型 浏览器对象模型(B rowser O bject M odel),将浏览器的各个组成部分封装为对象,使得 JavaScript 有能力与浏览器“对话”。
其组成有:
window——窗口对象navigator——浏览器对象screen——显示器屏幕对象history——历史记录对象location——地址栏对象2.1 window:窗口对象 window 对象,表示了浏览器窗口,所有 JS 全局对象、函数以及变量均自动成为 window 对象的成员。全局变量,是 window 对象的属性(甚至,HTML DOM 的 document 也是 window 对象的属性之一);全局函数,是 window 对象的方法。
2.1.1 属性 获取其他 BOM 对象:historylocationnavigatorscreen 获取 DOM 对象: 2.1.2 特点 window 对象无需创建,即可使用其相关的方法 window 引用可以省略 2.1.3 相关方法 (一)与弹出框有关的方法:
alert():显示带有一段消息和一个确认按钮的警告框confirm():显示带有一段消息以及确认按钮(若用户点击,则返回 true)和取消按钮(若用户点击,则返回 false)的对话框。prompt():显示可提示用户输入的对话框,其返回为用户输入的值。(二)与打开关闭有关的方法:
close():关闭浏览器窗口。“谁调用我,我关闭谁”open():打开一个新的浏览器窗口,同时返回新的 window 对象1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <body > <input id = "openBtn" type = "button" value = "打开窗口" > <script > var openBtn = document .getElementById ("openBtn" ); var newWindow; openBtn.onclick = function ( ){ newWindow = open ("https://joydee.top/" ); } var closeBtn = document .getElementById ("closeBtn" ); closeBtn.onclick = function ( ){ newWindow.close (); } </script > </body >
(三)与定时器有关的方法
setTimeout(JS代码或方法对象, 毫秒值):在指定的毫秒数后调用函数或计算表达式(只会执行一次 ),它返回的是一个唯一标识,用于取消定时器。clearTimeout():取消由 setTimeout() 方法设置的 timeoutsetInterval():按照指定的周期(以毫秒为单位)来调用传入的函数或计算表达式。clearInterval():取消由 setInterval() 设置的 timeout1 2 3 4 5 6 7 8 9 10 11 <body > <input id = "openBtn" type = "button" value = "打开窗口" > <script > var id = setTimeout ("fun();" , 3000 ); function fun ( ){ alert ('boom~~~' ); } </script > </body >
案例一:轮播图 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > 轮播图</title > <script > var cnt = 1 ; function fun ( ) { cnt = cnt % 4 + 1 ; var img = document .getElementById ("myimg" ); img.src = "./imgs/" + cnt + ".svg" ; } setInterval (fun, 2000 ); </script > </head > <body > <img id = "myimg" src = "./imgs/1.svg" width ="50%" > </body > </html >
案例二:首页自动跳转 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > 自动跳转</title > </head > <body > <p > <span id = "curtime" style ="color: dodgerblue" > 5</span > 秒后,自动跳转到首页...</p > <script > var ss = 5 , id; function showTime ( ) { ss--; if (ss <= 0 ){ location.href = "https://joydee.top" ; } var curtime = document .getElementById ("curtime" ); curtime.innerHTML = ss + "" ; } id = setInterval (showTime, 1000 ); </script > </body > </html >
2.2 location:地址栏对象 (一)创建(获取):
直接 window.location 或者不使用window的前缀: location (二)属性:
(三)方法:
2.3 history:历史记录对象 (一)创建(获取):
直接 window.history 或者不使用window的前缀: history (二)属性:
length:返回当前窗口历史列表中的 URL 数量(三)方法:
back():加载 history 列表中的前一个 URL。
forward():加载 history 列表中的下一个 URL。
go(参数):加载 history 列表中的某个具体页面。其参数:
Chapter 3. DOM-文档对象模型 网页被加载时,浏览器会创建页面的文档对象模型(D ocument O bject M odel),即将标记语言文档的各个组成部分,封装为对象。
W3C DOM 标准被分为 三个部分:
核心 DOM:针对任何结构化文档的标准模型Document:文档对象Element:元素对象Attribute:属性对象Text:文本对象Comment:注释对象Node:节点对象,其他五个的父对象 XML DOM:针对 XML 文档的标准模型 HTML DOM:针对 HTML 文档的标准模型 3.1 核心 DOM 模型 3.1.1 Document:文档对象 (一)在 HTML DOM 模型中,可以使用 window 对象来获取:window.document,也可省略前缀:document
(二)方法:
获取 Element 对象:getElementById():根据 id 属性值(一般唯一)来获取元素对象getElementsByTagName:根据元素名称获取元素对象们 (注意方法名中的 s),返回值是一个数组。getElementsByClassName():根据 class 属性获取元素对象们,返回值是一个数组getElementByName():根据 name 属性值获取元素对象们,返回值也是一个数组 创建其他 DOM 对象:createAttribute(name)createComment()createElement()createTextNode() 3.1.2 Element 元素对象 (一)方法:
removeAttribute():删除属性setAttribute():设置属性3.1.3 Node 节点对象 (一)特点:所有DOM对象都可被认为是一个节点
(二)属性:parentNode:返回节点的父节点
(三)方法:CRUD DOM树:
appendChild():向节点的子节点列表的结尾添加子节点removeChild():删除(并返回)当前节点的指定子节点replaceChild():用新节点替换一个子节点。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > 自动跳转</title > <style > div { border : 1px solid black; } #div1 { width : 200px ; height : 200px ; } #div2 { width : 100px ; height : 100px ; } </style > </head > <body > <div id = "div1" > <div id = "div2" > 我是div2</div > 我是div1 </div > <a href = "javascript:void(0);" id = "del" > 删除子节点 </a > <script > var element_a = document .getElementById ("del" ); element_a.onclick = function ( ) { var mydiv1 = document .getElementById ("div1" ); var mydiv2 = document .getElementById ("div2" ); mydiv1.removeChild (mydiv2); } </script > </body > </html >
3.2 HTML DOM 通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素。
HTML DOM 模型被构造为对象 的树:
通过可编程的对象模型,JavaScript 获得了足够的能力来创建动态的 HTML。
JavaScript 能够改变页面中的所有 HTML 元素
JavaScript 能够改变页面中的所有 HTML 属性
JavaScript 能够改变页面中的所有 CSS 样式
方式一:使用 元素的 style 属性来设置
方式二:提前定义好类选择器 的样式,通过元素的 className 属性来设置其 class 属性值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > Title</title > <style > .cls1 { border : 3px solid dodgerblue; width : 100px ; height : 100px ; } </style > </head > <body > <div id = "div1" > 控制样式方式一 </div > <div id = "div2" > 控制样式方式二 </div > <script > var div1 = document .getElementById ("div1" ); div1.onclick = function ( ){ div1.style .border = "3px solid black" ; div1.style .width = "200px" ; div1.style .fontSize = "20px" ; } var div2 = document .getElementById ("div2" ); div2.onclick = function ( ){ div2.className = "cls1" ; } </script > </body > </html >
JavaScript 能够对页面中的所有事件做出反应
案例:动态表格 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 <!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 > <caption > 学生信息表</caption > <tr > <th > 编号</th > <th > 姓名</th > <th > 性别</th > <th > 操作</th > </tr > <tr > <td > 1</td > <td > Luffy</td > <td > 男</td > <td > <a href ="javascript:void(0);" onclick ="delTr(this);" > 删除</a > </td > </tr > </table > <script > document .getElementById ("btn_add" ).onclick = function ( ) { var id = document .getElementById ("id" ).value ; var name = document .getElementById ("name" ).value ; var gender = document .getElementById ("gender" ).value ; var table = document .getElementsByTagName ("table" )[0 ]; 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>" ; } function delTr (obj ) { var table = obj.parentNode .parentNode .parentNode ; var tr = obj.parentNode .parentNode ; table.removeChild (tr); } </script > </body > </html >