JavaScript 概念 一门客户端脚本语言,运行在客户端浏览器中。每一个浏览器都有JavaScript的解析引擎。
脚本语言:不需要编译,直接就可以被浏览器解析执行了
功能 可以增强用户和html页面的交互过程,可以来控制html元素,让页面有一些动态的效果,增强用户的体验
发展 1992年,Nombase公司,开发出第一门客户端脚本语言,专门用于表单的校验,命名为:C–,后来更名为:ScriptEase 1995年,Netscape(网景)公司,开发了一门客户端脚本语言:LiveScript。后来,请来SUN公司的专家,修改LiveScript,命名为JavaScript 1996年,微软抄袭JavaScript开发出JScript语言 1997年,ECMA(欧洲计算机制造商协会),制定出客户端脚本语言的标准:ECMAScript。就是统一了所有客户端脚本语言的编码方式。 JavaScript=ECMAScript+JavaScript自己特有的东西(BOM+DOM) ECMAScript 客户端脚本语言的标准
基本语法 与html结合方式 注释 数据类型 原始数据类型(基本数据类型)number:数字。整数/小数/NaN(not a number 一个不是数字的数字类型) string:字符串。字符串 “abc”、”a”、 ‘abc’ boolean:true和false null:一个对象为空的占位符 undefined:未定义。如果一个变量没有初始化值,则会被默认赋值为undefined 引用数据类型:对象 变量 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 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > 变量</title > <script > var num = 1 ; var num2 = 1.2 ; var num3 = NaN ; document .write (num+"---" +typeof (num)+"<br>" ); document .write (num2+"---" +typeof (num2)+"<br>" ); document .write (num3+"---" +typeof (num3)+"<br>" ); var str = "abc" ; var str2 = 'edf' ; document .write (str+"---" +typeof (str)+"<br>" ); document .write (str2+"---" +typeof (str2)+"<br>" ); var flag = true ; document .write (flag+"---" +typeof (flag)+"<br>" ); var obj = null ; var obj2 = undefined ; var obj3 ; document .write (obj+"---" +typeof (obj)+"<br>" ); document .write (obj2+"---" +typeof (obj2)+"<br>" ); document .write (obj3+"---" +typeof (obj3)+"<br>" ); </script > </head > <body > </body > </html >
运算符 一元运算符 只有一个运算数的运算符
++(--)在前,先自增(自减),在运算。++(--)在后,先运算,在自增(自减)
在JS中,如果运算数不是运算符所要求的类型,那么js引擎会自动将运算数进行类型转换
算术运算符 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > 算数运算符</title > <script > var a = 3 ; var b = 4 ; document .write (a + b + "<br>" ); document .write (a - b + "<br>" ); document .write (a * b + "<br>" ); document .write (a / b + "<br>" ); document .write (a % b + "<br>" ); </script > </head > <body > </body > </html >
赋值运算符 比较运算符 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > 比较运算符</title > <script > document .write ((3 > 4 ) + "<br>" ); document .write (("abc" < "acd" ) + "<br>" ); document .write (("123" == 123 ) + "<br>" ); document .write (("123" === 123 ) + "<br>" ); </script > </head > <body > </body > </html >
逻辑运算符 &&:与(短路)
||:或(短路)
!:非
其他类型转boolean
number:0或NaN为假,其他为真
string:除了空字符串(“”),其他都是true
null&undefined:都是false
对象:所有对象都为true
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 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > 比较运算符</title > <script > var flag = true ; document .write (flag + "<br>" ); document .write (!flag + "<br>" ); document .write ("<hr>" ); var num = 3 ; var num2 = 0 ; var num3 = NaN ; document .write (!!num + "<br>" ); document .write (!!num2 + "<br>" ); document .write (!!num3 + "<br>" ); document .write ("<hr>" ); var str1 = "abc" ; var str2 = "" ; document .write (!!str1 + "<br>" ); document .write (!!str2 + "<br>" ); document .write ("<hr>" ); var obj = null ; var obj2; document .write (!!obj + "<br>" ); document .write (!!obj2 + "<br>" ); document .write ("<hr>" ); var date = new Date (); document .write (!!date + "<br>" ); document .write ("<hr>" ); obj = "123" ; if (obj != null && obj.length > 0 ) { alert (123 ); } if (obj) { alert (111 ); } </script > </head > <body > </body > </html >
三元运算符 流程控制语句 if…else…
switch
while
do…while
for
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 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > for语句</title > <script > var sum = 0 ; for (var i = 1 ; i <= 100 ; i++) { sum += i; } alert (sum); var a; switch (a) { case 1 : alert ("number" ); break ; case "abc" : alert ("string" ); break ; case true : alert ("true" ); break ; case null : alert ("null" ); break ; case undefined : alert ("undefined" ); break ; } var sum = 0 ; var num = 1 ; while (num <= 100 ) { sum += num; num++; } alert (sum); </script > </head > <body > </body > </html >
特殊语法 语句以;结尾,如果一行只有一条语句,则;可以省略(但是不建议) 变量的定义使用var关键字,也可以不使用用:定义的变量是局部变量 不用:定义的变量是全局变量(不建议) 练习 九九乘法表
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 > 99乘法表</title > <style > td { border : 1px solid; } </style > <script > document .write ("<table align='center'>" ); for (var i = 1 ; i <= 9 ; i++) { document .write ("<tr>" ); for (var j = 1 ; j <= i; j++) { document .write ("<td>" ); document .write (i + " * " + j + " = " + (i * j) + " " ); document .write ("</td>" ); } document .write ("</tr>" ); } document .write ("</table>" ); </script > </head > <body > </body > </html >
基本对象 Function 函数(方法)对象
创建
var fun1 = new Function(“a”,”b”,”c”,”alert(a);”); function fun2(a , b){ alert(a + b); } var fun3 = function(a,b){alert(a+b);} 方法
属性
特点
方法定义是,形参的类型不用写,返回值类型也不写 方法是一个对象,如果定义名称相同的方法,会覆盖 在JS中,方法的调用只与方法的名称有关,和参数列表的个数无关 在方法声明中有一个隐藏的内置对象(数组),arguments,封装所有的实际参数 调用
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 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > Function对象</title > <script > var fun1 = new Function ("a" , "b" , "c" , "alert(a);" ); fun1 (3 , 4 ); alert (fun1.length ); function fun2 (a, b ) { alert (a + b); } fun2 (3 , 4 ); alert (fun2.length ); var fun3 = function (a, b ) { alert (a + b); } alert (fun3.length ); fun3 (3 , 4 ); fun2 = function (a, b ) { alert (a - b); } function fun2 (a, b ) { alert (a - b); alert (a); alert (b); } fun2 (3 , 4 ); fun2 (1 , 2 ); fun2 (1 ); fun2 (); fun2 (1 , 2 , 3 ); function add (a, b ) { return a + b; } function add ( ) { var sum = 0 ; for (var i = 0 ; i < arguments .length ; i++) { sum += arguments [i]; } return sum; } var sum = add (1 , 2 , 3 , 4 ); alert (sum); add (1 , 3 ); </script > </head > <body > </body > </html >
Array 数组对象
创建
var arr = new Array(元素列表); var arr = new Array(默认长度); var arr = [元素列表]; 方法
join(参数)
将数组中的元素按照指定分隔符拼接为字符串
push()
向数组的末尾添加一个或更多元素,并返回新的长度
属性
特点
JS中,数组元素的类型是可变的 JS中,数组长度可变的 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 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > Array对象</title > <script > var arr1 = new Array (1 , 2 , 3 ); var arr2 = new Array (5 ); var arr3 = [1 , 2 , 3 , 4 ]; var arr4 = new Array (); document .write (arr1 + "<br>" ); document .write (arr2 + "<br>" ); document .write (arr3 + "<br>" ); document .write (arr4 + "<br>" ); var arr = [1 , "abc" , true ]; document .write (arr + "<br>" ); document .write (arr[0 ] + "<br>" ); document .write (arr[1 ] + "<br>" ); document .write (arr[2 ] + "<br>" ); arr[10 ] = "hehe" ; document .write (arr[10 ] + "<br>" ); document .write (arr[9 ] + "<br>" ); alert (arr.length ); document .write (arr.join ("--" ) + "<br>" ); arr.push (11 ); document .write (arr.join ("--" ) + "<br>" ); </script > </head > <body > </body > </html >
Boolean Date 日期对象
创建
var date = new Date()
方法
Math 数学对象
创建
Math对象不用创建,直接使用,Math.方法名()
方法
random()
返回0~1之间的随机数,含0不含1
ceil(x)
对数进行上舍入
floor(x)
对数进行下舍入
round(x)
把数四舍五入为最接近的整数
属性
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 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > Math对象</title > <script > document .write (Math .PI + "<br>" ); document .write (Math .random () + "<br>" ); document .write (Math .round (3.14 ) + "<br>" ); document .write (Math .ceil (3.14 ) + "<br>" ); document .write (Math .floor (3.14 ) + "<br>" ); Math .random () document .write (number); </script > </head > <body > </body > </html >
Number String RegExp 正则表达式对象,定义字符串的组成规则
单个字符:[]
如[a]、[ab]、[a-zA-Z0-9_]
特殊符号代表特殊含义的单个字符
\d
单个数字字符[0-9]
\w
单个单词字符[a-zA-Z0-9_]
量词符号
?:表示出现0次或1次
*:表示出现0次或多次
+:出现一次或多次
{m,n}
表示m<=数量<=n
m如果缺省,{,n}表示最多n次
n如果缺省,{m,} 表示最少m次
开始结束符号
正则对象
创建
方法
test(参数)
验证指定的字符串是否符合正则定义的规范
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > RegExp对象</title > <script > var reg = new RegExp ("^\\w{6,12}$" ); var reg2 = /^\w{6,12}$/ ; alert (reg); alert (reg2) var username = "zhangsan" ; var flag = reg.test (username); alert (flag); </script > </head > <body > </body > </html >
Global 特点
全局对象,这个Global中封装的方法不需要对象就可以直接调用,方法名();
方法
encodeURI():url编码 decodeURI():url解码 encodeURIComponent() :url编码,编码的字符更多 decodeURIComponent():url解码 parseInt():将字符串转为数字逐一判断每一个字符是否是数字,直到不是数字为止,将前边数字部分转为number isNaN() : 判断一个值是否是NANNAN六亲不认,连自己都不认,NAN参与的==比较全部是false eval():将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 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > Global对象</title > <script > var str = "http://www.baidu.com?wd=百度" ; var encode = encodeURI (str); document .write (encode + "<br>" ); var s = decodeURI (encode); document .write (s + "<br>" ); var str1 = "http://www.baidu.com?wd=百度" ; var encode1 = encodeURIComponent (str1); document .write (encode1 + "<br>" ); var s1 = decodeURIComponent (encode); document .write (s1 + "<br>" ); var str = "a234abc" ; var number = parseInt (str); alert (number + 1 ); var a = NaN ; document .write (a == NaN ); document .write (isNaN (a)); var jscode = "alert(123)" ; eval (jscode); </script > </head > <body > </body > </html >
BOM Browser Object Model:浏览器对象模型
将浏览器的各个组成部分封装成对象浏览器对象(Navigator) 浏览器窗口对象(Window) 地址栏对象(Location) 历史记录对象(History) 显示器屏幕对象(Screen) Window 创建 不需要创建,直接使用即可
方法 与弹出框有关的方法alert():显示带有一段消息和确认按钮的警告框 confirm():显示带有一段消息以及确认按钮和取消按钮的对话框如果用户点击确认按钮,则方法返回true 如果用户点击取消按钮,则方法返回false prompt():显示可提示用户输入的对话框 与打开关闭有关的方法close():关闭浏览器窗口 open():打开一个新窗口返回一个新的window对象,可以用这个对象调用close方法关闭新打开的窗口 与定时器有关的方法setTimeout() 在指定的毫秒数后调用函数或计算表达式括号中参数1:js代码或者方法对象 括号中参数2:毫秒值 方法返回值:唯一标识,用于取消定时器 clearTimeout():取消有setTimeout()方法设置的timeout参数可以为setTimeout()返回的id,用于取消 setInterval():按照指定的周期(以毫秒计)来调用函数或计算表达式 clearInterval():取消有setInterval()设置的timeout 属性 获取其他BOM对象history location Navigator Screen 获取DOM对象 特点 Window对象不需要创建可以直接使用window使用。比如window.方法名() window引用可以省略。就是可以直接使用,方法名() 案例 每隔3秒切换轮播图
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 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > 轮播图</title > </head > <body > <img id ="img" src ="img/banner_1.jpg" width ="100%" > <script > var number = 1 ; function fun ( ) { number++; if (number > 3 ) { number = 1 ; } var img = document .getElementById ("img" ); img.src = "img/banner_" + number + ".jpg" ; } setInterval (fun, 3000 ); </script > </body > </html >
Location 地址栏对象
创建 通过获取得到
方法 属性 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 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > Location对象</title > </head > <body > <input type ="button" id ="btn" value ="刷新" > <input type ="button" id ="goBaidu" value ="去百度" > <script > var btn = document .getElementById ("btn" ); btn.onclick = function ( ) { location.reload (); } var href = location.href ; alert (href); var goBaidu = document .getElementById ("goBaidu" ); goBaidu.onclick = function ( ) { location.href = "https://www.baidu.com" ; } </script > </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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > 自动跳转</title > <style > p { text-align : center; } span { color : red; } </style > </head > <body > <p > <span id ="time" > 5</span > 秒之后,自动跳转到首页... </p > <script > var second = 5 ; var time = document .getElementById ("time" ); function showTime ( ) { second--; if (second <= 0 ) { location.href = "https://www.baidu.com" ; } time.innerHTML = second + "" ; } setInterval (showTime, 1000 ); </script > </body > </html >
创建 通过获取得到
方法 back():加载history列表中的前一个URL forward():加载history列表中的下一个URL go():加载history列表中的某个具体页面 属性 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 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > History对象</title > </head > <body > <input type ="button" id ="btn" value ="获取历史记录个数" > <a href ="09_History对象2.html" > 09页面</a > <input type ="button" id ="forward" value ="前进" > <script > var btn = document .getElementById ("btn" ); btn.onclick = function ( ) { var length = history.length ; alert (length); } var forward = document .getElementById ("forward" ); forward.onclick = function ( ) { history.forward (); history.go (1 ); } </script > </body > </html >
DOM Document Object Model 文档对象模型
将标记语言文档的各个组成部分,封装为对象。我们可以使用这些对象,对标记语言文档进行CRUD的动态操作 DOM将HTML文档表达为树结构 W3C DOM标准被分为3个不同的部分核心 DOM:针对任何结构化文档的标准模型 XML DOM:针对XML文档的标准模型 HTML DOM:针对HTML文档的标准模型
核心DOM Document:文档对象 Element:元素对象 Attribute:属性对象 Text:文本对象 Comment:注释对象 Node:节点对象,其他5个的父对象 Document 创建 在html dom模型中可以使用window对象来获取 window.document document 方法 获取Element对象
创建其他DOM对象
createAttribute(name) createComment() createElement() createTextNode() 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 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > Document对象</title > </head > <body > <div id ="div1" > div1</div > <div id ="div2" > div2</div > <div id ="div3" > div3</div > <div class ="cls1" > div4</div > <div class ="cls1" > div5</div > <input type ="text" name ="username" > <script > var divs = document .getElementsByTagName ("div" ); alert (divs.length ); var div_cls = document .getElementsByClassName ("cls1" ); alert (div_cls.length ); var ele_username = document .getElementsByName ("username" ); alert (ele_username.length ); var table = document .createElement ("table" ); alert (table); </script > </body > </html >
Element 元素对象
获取/创建 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <html > <head > <title > 标题</title > </head > <body > <img id ="light" src ="img.off.gif" > <script > var light = document .getElementById ("light" ); alert ("我要换图片了" ); light.src = "img/on.gif" ; </script > </body > </html >
方法 removeAttribute():删除属性 setAttribute():设置属性 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 > Element对象</title > </head > <body > <a > 点我试一试</a > <input type ="button" id ="btn_set" value ="设置属性" > <input type ="button" id ="btn_remove" value ="删除属性" > <script > var btn_set = document .getElementById ("btn_set" ); btn_set.onclick = function ( ) { var element_a = document .getElementsByTagName ("a" )[0 ]; element_a.setAttribute ("href" , "https://www.baidu.com" ); } var btn_remove = document .getElementById ("btn_remove" ); btn_remove.onclick = function ( ) { var element_a = document .getElementsByTagName ("a" )[0 ]; element_a.removeAttribute ("href" ); } </script > </body > </html >
Node 节点对象
特点 所有dom对象都可以被认为是一个节点
方法 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 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 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > Node对象</title > <style > div { border : 1px solid red; } #div1 { width : 200px ; height : 200px ; } #div2 { width : 100px ; height : 100px ; } #div3 { 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 > <a href ="javascript:void(0);" id ="add" > 添加子节点</a > <script > var element_a = document .getElementById ("del" ); element_a.onclick = function ( ) { var div1 = document .getElementById ("div1" ); var div2 = document .getElementById ("div2" ); div1.removeChild (div2); } var element_add = document .getElementById ("add" ); element_add.onclick = function ( ) { var div1 = document .getElementById ("div1" ); var div3 = document .createElement ("div" ); div3.setAttribute ("id" , "div3" ); div1.appendChild (div3); } var div2 = document .getElementById ("div2" ); var div1 = div2.parentNode ; alert (div1); </script > </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 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 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 <!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 > 令狐冲</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 > 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 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_a = document .createElement ("td" ); var ele_a = document .createElement ("a" ); ele_a.setAttribute ("href" , "javascript:void(0);" ); ele_a.setAttribute ("onclick" , "delTr(this);" ); var text_a = document .createTextNode ("删除" ); ele_a.appendChild (text_a); td_a.appendChild (ele_a); var tr = document .createElement ("tr" ); tr.appendChild (td_id); tr.appendChild (td_name); tr.appendChild (td_gender); tr.appendChild (td_a); var table = document .getElementsByTagName ("table" )[0 ]; table.appendChild (tr); } 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 >
HTML DOM 标签体的设置和获取:innerHTML 使用html元素对象的属性 控制样式 设置和获取标签体 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 > HTMLDOM</title > </head > <body > <div id ="div1" > div</div > <script > var div = document .getElementById ("div1" ); var innerHTML = div.innerHTML ; alert (innerHTML); div.innerHTML = "<input type='text'>" ; div.innerHTML += "<input type='text'>" ; </script > </body > </html >
控制样式 使用元素的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 38 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > 控制样式</title > <style > .d1 { border : 1px solid red; width : 100px ; height : 100px ; } .d2 { border : 1px solid blue; width : 200px ; height : 200px ; } </style > </head > <body > <div id ="div1" > div1</div > <div id ="div2" > div2</div > <script > var div1 = document .getElementById ("div1" ); div1.onclick = function ( ) { div1.style .border = "1px solid red" ; div1.style .width = "200px" ; div1.style .fontSize = "20px" ; } var div2 = document .getElementById ("div2" ); div2.onclick = function ( ) { div2.className = "d1" ; } </script > </body > </html >
事件的监听机制 某些组件被执行了某些操作后,触发某些代码的执行
事件:某些操作。如单击、双击、键盘按下、鼠标移动 事件源:指组件。如:按钮、文本输入框…. 监听器:代码 注册监听:将事件、事件源、监听器结合在一起,当事件源上发生了某个事件,则触发执行某个监听器代码。 常见事件 点击事件 onclick:单击事件 ondbclick:双击事件 焦点事件 onblur:失去焦点
一般用于表单验证
onfocus:元素获得焦点
加载事件 鼠标事件 onmousedown:鼠标按键被按下
定义方法时,定义一个形参,接受event对象 event对象的button属性可以获取鼠标按钮键被点击了 onmouseup:鼠标按键被松开
onmousemove:鼠标被移动
onmouseover:鼠标移动到某元素之上
onmouseout:鼠标从某元素移开
键盘事件 onkeydown:某个键盘按键被按下 onkeyup:某个键盘按键被松开 onkeypress:某个键盘按键被按下并松开 选择和改变 onchange:域的内容被改变 onselect:文本被选中 表单事件 onsubmit:确认按钮被点击
可以阻止表单的提交 方法返回false则表单被阻止提交 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 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > 常见事件</title > <script > window .onload = function ( ) { document .getElementById ("username" ).onblur = function ( ) { alert ("失去焦点了..." ); } document .getElementById ("username" ).onmouseover = function ( ) { alert ("鼠标来了...." ); } document .getElementById ("username" ).onmousedown = function (event ) { alert (event.button ); } document .getElementById ("username" ).onkeydown = function (event ) { if (event.keyCode == 13 ) { alert ("提交表单" ); } } document .getElementById ("username" ).onchange = function (event ) { alert ("改变了..." ) } document .getElementById ("city" ).onchange = function (event ) { alert ("改变了..." ) } document .getElementById ("form" ).onsubmit = function ( ) { var flag = false ; return flag; } } function checkForm ( ) { return true ; } </script > </head > <body > <form action ="#" id ="form" onclick ="return checkForm();" > <input name ="username" id ="username" > <select id ="city" > <option > --请选择--</option > <option > 北京</option > <option > 上海</option > <option > 西安</option > </select > <input type ="submit" value ="提交" > </form > </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 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 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 <!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% ; } .out { background-color : white; } .over { background-color : pink; } </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" ); for (var i = 0 ; i < cbs.length ; i++) { cbs[i].checked = !cbs[i].checked ; } } document .getElementById ("firstCb" ).onclick = function ( ) { var cbs = document .getElementsByName ("cb" ); for (var i = 0 ; 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 = "over" ; } trs[i].onmouseout = function ( ) { this .className = "out" ; } } } </script > </head > <body > <table > <caption > 学生信息表</caption > <tr > <th > <input type ="checkbox" name ="cb" id ="firstCb" > </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 >
表单验证 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 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > 注册页面</title > <style > * { margin : 0px ; padding : 0px ; box-sizing : border-box; } body { background : url ("img/register_bg.png" ) no-repeat center; padding-top : 25px ; } .rg_layout { width : 900px ; height : 500px ; border : 8px solid #EEEEEE ; background-color : white; margin : auto; } .rg_left { float : left; margin : 15px ; } .rg_left > p :first -child { color : #FFD026 ; font-size : 20px ; } .rg_left > p :last-child { color : #A6A6A6 ; font-size : 20px ; } .rg_center { float : left; } .rg_right { float : right; margin : 15px ; } .rg_right > p :first -child { font-size : 15px ; } .rg_right p a { color : pink; } .td_left { width : 100px ; text-align : right; height : 45px ; } .td_right { padding-left : 50px ; } #username , #password , #email , #name , #tel , #birthday , #checkcode { width : 251px ; height : 32px ; border : 1px solid #A6A6A6 ; border-radius : 5px ; padding-left : 10px ; } #checkcode { width : 110px ; } #img_check { height : 32px ; vertical-align : middle; } #btn_sub { width : 150px ; height : 40px ; background-color : #FFD026 ; border : 1px solid #FFD026 ; } .error { color : red; } #td_sub { padding-left : 150px ; } </style > <script > window .onload = function ( ) { document .getElementById ("form" ).onsubmit = function ( ) { return checkUsername () && checkPassword (); } document .getElementById ("username" ).onblur = checkUsername; document .getElementById ("password" ).onblur = checkPassword; } 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='35' height='25' src='img/gou.png'/>" ; } else { s_username.innerHTML = "用户名格式有误" ; } return flag; } function checkPassword ( ) { var password = document .getElementById ("password" ).value ; var reg_password = /^\w{6,12}$/ ; var flag = reg_password.test (password); var s_password = document .getElementById ("s_password" ); if (flag) { s_password.innerHTML = "<img width='35' height='25' src='img/gou.png'/>" ; } else { s_password.innerHTML = "密码格式有误" ; } return flag; } </script > </head > <body > <div class ="rg_layout" > <div class ="rg_left" > <p > 新用户注册</p > <p > USER REGISTER</p > </div > <div class ="rg_center" > <div class ="rg_form" > <form action ="#" id ="form" method ="get" > <table > <tr > <td class ="td_left" > <label for ="username" > 用户名</label > </td > <td class ="td_right" > <input type ="text" name ="username" id ="username" placeholder ="请输入用户名" > <span id ="s_username" class ="error" > </span > </td > </tr > <tr > <td class ="td_left" > <label for ="password" > 密码</label > </td > <td class ="td_right" > <input type ="password" name ="password" id ="password" placeholder ="请输入密码" > <span id ="s_password" class ="error" > </span > </td > </tr > <tr > <td class ="td_left" > <label for ="email" > Email</label > </td > <td class ="td_right" > <input type ="email" name ="email" id ="email" placeholder ="请输入邮箱" > </td > </tr > <tr > <td class ="td_left" > <label for ="name" > 姓名</label > </td > <td class ="td_right" > <input type ="text" name ="name" id ="name" placeholder ="请输入姓名" > </td > </tr > <tr > <td class ="td_left" > <label for ="tel" > 手机号</label > </td > <td class ="td_right" > <input type ="text" name ="tel" id ="tel" placeholder ="请输入手机号" > </td > </tr > <tr > <td class ="td_left" > <label > 性别</label > </td > <td class ="td_right" > <input type ="radio" name ="gender" value ="male" checked > 男 <input type ="radio" name ="gender" value ="female" > 女 </td > </tr > <tr > <td class ="td_left" > <label for ="birthday" > 出生日期</label > </td > <td class ="td_right" > <input type ="date" name ="birthday" id ="birthday" placeholder ="请输入出生日期" > </td > </tr > <tr > <td class ="td_left" > <label for ="checkcode" > 验证码</label > </td > <td class ="td_right" > <input type ="text" name ="checkcode" id ="checkcode" placeholder ="请输入验证码" > <img id ="img_check" src ="img/verify_code.jpg" > </td > </tr > <tr > <td colspan ="2" id ="td_sub" > <input type ="submit" id ="btn_sub" value ="注册" > </td > </tr > </table > </form > </div > </div > <div class ="rg_right" > <p > 已有账号?<a href ="#" > 立即登录</a > </p > </div > </div > </body > </html >