JavaScript 概述
1、什么是JavaScript
JavaScript 简称 JS,是一种专门运行于JS解释器/引擎中的解释型脚本语言
2、JS发展史
1、1992年Nombas公司开发了一款运行在网页中的脚本语言,名称为 CMM(C--),后来更名为 ScriptEase
2、1995年Netscape(网景)为自己的浏览器Navigator2.0开发了另一款脚本语言-LiveScript,更名为 JavaScript
3、1996年,Microsoft为自己的IE3.0,发布了JavaScript的克隆版本 JScript
4、1997年,Netscape找到了ECMA(欧洲计算机制造商协会),将JS提交给了ECMA。从此JS的核心更名为 ECMA Script 简称为
ES
JS的组成:
1、核心 - ECMA Script
包含了JS的最基本的语法规范
2、文档对象模型
Document Object Model -> DOM
允许JS操作HTML网页上的内容
DOM的规范是由W3C来制定的
3、浏览器对象模型
Browser Object Model -> BOM
允许JS操作浏览器
使用JS
1、使用元素事件执行JS脚本代码
事件:用户在元素上所激发的行为操作
onclick 事件:
当用户单击元素时要做的操作
语法:
<ANY onclick="JS脚本代码">
JS脚本代码:
console.log('向控制台中输出的内容');
2、嵌入在网页中的<script></script>
语法:
<script></script>
特点:
网页加载的时候就开始执行
document.write() 向网页输出一句话
注意:如果通过按钮的单击事件执行document.write()的话,则会刷新网页内容
3、将JS脚本写在外部的JS文件中
步骤:
1、创建JS文件(xxx.js)并编写脚本
2、在网页中对JS文件进行引入
<script src="js文件路径"></script>
<script src="xxx.js">
console.log();
</script>
JS基础语法
1、语法规范
1、JS都是由语句来组成的
1、由运算符,表达式,关键字组成
2、严格区分大小写
console.log(); 正确
Console.log(); 错误
3、每条语句必须以 ; 表示结束
2、JS中的注释
单行注释:// 注释内容
多行注释:/* */
JS中的变量 和 常量
1、变量
1、声明变量的语法
声明:var 变量名;
赋值:变量名 = 值;
声明并赋值: var 变量名=值;
注意:
1、声明变量时,尽量使用var关键字,如果省略,也可以,但容易出问题
2、声明变量但未赋值的话,默认值为 undefined
2、变量名的命名规范
1、不能使用JS中的关键字或保留关键字
2、由字母,数字,下划线(_)和$组成
var u-name = "";错误
var u_name = "";正确
var $ = 35; 正确
3、不能以数字开头
4、尽量不要重复
5、尽量见名知意
var a;
var b;
var stuName;
var ab;
6、如无特殊需求的话,尽量使用小驼峰命名法
var age;
var stuAge;
2、常量
1、什么是常量
一经声明就不允许修改的数据就是常量
2、语法
const 常量名 = 值;
注意:
常量名采用全大写的形式
数据类型
1、作用
约束了数据在内存中所占空间大小问题的
2、JS数据类型分类
1、基本数据类型(值类型)
1、number类型
数字类型,可以表示32位的整数或64位的浮点数
整数:
表示十进制,八进制,十六进制
十进制:var num = 111;var num = 321;
八进制:var num = 010;
十六进制:var num = 0x22;
小数:
小数点计数法:var num = 123.456;
科学计数法:var num = 1.5e2;
2、string类型
字符串
都是由Unicode的字符,数字,标点组成的
1、查看字符的Unicode码
var str = "张";
var uCode=str.charCodeAt().toString(2)
2、如何将Unicode码转换成对应的字符??
已知Unicode码:5f20
var str = "\u5f20";
console.log(str);
3、中文范围
"\u4e00" ~ "\u9fa5"
4、转义字符
\n : 换行
\t : 制表符
\" : "
\' : '
\\ : \
3、boolean类型
布尔类型,只用于表示真(true)或假(false)
注意:
在参与数字运算时,true当作1运算,false当作0运算
var r = 365 + true ; // 366
var r = 27.58 * false; // 0
var r = true + false; // 1
4、查看数据类型
使用 typeof() 或 typeof 都可以查看变量的数据类型
2、引用数据类型
3、数据类型转换
1、隐式转换
不同类型的数据在做加法运算时,会进行自动转换
1、字符串 + 数字 :将数字转换为字符串
var num = 15;
var str = "18";
var r = num + str; //1518
var r = "15" + 18 + 15; //151815
var r = 15 + 18 + "15"; //3315
2、数字 + 布尔 :将布尔转为数字做加法
var boo = true;
var num = 15;
var r = boo + num; //16
3、字符串 + 布尔 :将布尔转换为字符串做连接
var boo = true;
var str = "Hello";
var r = boo + str;//trueHello
4、布尔 + 布尔 :都转换为数字做加法运算
var b1 = true;
var b2 = false;
var r = b1 + b2; //1
2、强制转换(转换函数)
1、toString()
将任意类型的数据转换成字符串,并返回转换后的结果
语法:
var r = 变量.toString();
var r = 变量+"";
2、parseInt()
作用:将指定的数据尽量转换成整数,如果实在无法转换的话,则返回NaN(Not a Number)
ex:
1、
var r = parseInt("456");
r : 456
2、
var r = parseInt("123.456");
r : 123
3、
var r = parseInt("123Hello");
r : 123
4、
var r = parseInt("Hello123");
r : NaN
3、parseFloat()
作用:尽量将任意类型的数据转换为小数,如果实在无法转换,那么结果为 NaN
1、
var r = parseFloat("3.14");
r : 3.14
2、
var r = parseFloat("3.14Hello");
r : 3.14
3、
var r = parseFloat("Hello3.14")
r : NaN
4、Number()
作用:将任意类型的数据转换为数字,只要包含非法字符,结果就是NaN
1、
var r = Number("35");
r : 35
2、
var r = Number("35.65");
r : 35.65
3、
var r = Number("35NIHAO");
r : NaN
运算符
1、算数运算符
1、+,-,*,/,%
5 / 2 : 2.5
5 % 2 : 1
2 % 5 : 2
var num = 1234;
var ge = num % 10;
var shi = parseInt(num / 10) % 10
var bai = parseInt(num / 100) % 10;
var qian = parseInt(num / 1000);
2、++,--
++ :自增运算符,在自身基础上做+1操作
-- :自减运算符,在自身基础上做-1操作
前后缀:
var num = 10;
num++;
特点:先使用num的值,然后再做自增运算
var num = 10;
console.log(num++); 输出 10
console.log(num); 输出 11
var num = 10;
++num;
特点:先对变量进行自增,然后再使用变量的值
var num = 10;
console.log(++num); 输出 11
console.log(num);输出 11
var num = 5;
5 (6)6 6(7) (8)8 8
var result = num + ++num + num++ + ++num + num ;
结果:33
2、关系运算符(比较运算符)
>,<,>=,<=,==,!=,===,!==
1、10 > 5 : true
2、"10" > 5 : true
运算符两端如果有一个是数字的话,那么另外一个会自动转换(通过Number())成数字,再进行比较
3、"10a" > 5 : false
4、"10a" < 5 : false
NaN 除了 != 以外,其他比较都是false
5、"10" > "5" : false
比较的是 字符1的ASCII 和 字符5的ASCII
6、"张三丰">"张无忌" : false
三:19977
无:26080
7、"10" == 10 : true
=== : 判断数值和数据类型必须全相等的时候,结果才为真
!== : 数值 和 数据类型 任何一个不等的话,结果都为真
"10" !== 10 : true
"10" != 10 : false
3、逻辑运算符
!:逻辑非,等同于python Not
非真即假,非假即真
&&:逻辑与,等同于python and
||:逻辑或,等同于python or
4、位运算符
1、按位与 &
两个数字的二进制位进行比较,对应位都为1,则该位结果为1,否则为0
场合:奇偶性验证
7 & 1 : 1 奇数
7 : 111
1 : 001
6 : 110
1 : 001
2、按位异或 ^
不借助第三方变量交换两个数字时
var a = 3;
var b = 5;
a = a ^ b; a = 6
3:011
5:101
==============
110 : 6
b = b ^ a; b = 3
b: 5:101
a: 6:110
==============
011 : 3
a = a ^ b; a = 5
a: 6:110
b: 3:011
=================
101 : 5
5、条件运算符
单目运算符:++,--,!,-
双目运算符:+,-,... ...
三目运算符:? :
语法:? :
条件表达式 ? 表达式1 : 表达式2;
当条件表达式的结果为true的时候,执行表达式1中的内容,并将表达式1的结果作为整体表达式的结果。否则,则执行表达
式2的内容,并将表达式2的结果作为整体表达式的结果
6、赋值运算符
+=,-=,*=,/=,
var a = 5;
a += 5; // a=a+5
var a = 3;
var b = 5;
a ^= b; // a = a ^ b;
b ^= a; // b = b ^ a;
a ^= b; // a = a ^ b;
流程控制
1、程序控制结构
1、顺序结构
2、分支结构 / 选择结构
3、循环结构
2、分支结构
1、if 结构
1、if结构
语法:
if(条件){
语句块;
}
2、if ... else 结构
语法:
if(条件){
语句块1;
}else{
语句块2;
}
3、if ... else if ... 结构
语法:
if(条件1){
语句块1
}else if(条件2){
语句块2
}else if(条件n){
语句块n
}else{
语句块n+1
}
分支结构
1、if结构(略)
2、switch结构
1、作用
等值判断
2、语法
switch(变量){
case 值1:
语句块1
//break; //跳出switch结构 ,可选
case 值2:
语句块2
break; //跳出switch结构 ,可选
... ...
default:
语句块n
/*所有case都未匹配上时,才执行default*/
}
注意:
1、变量 和 case后的值的判断,采用 === 来判断的。
2、break,如果省略break的话,则从匹配的case块开始,依次向下执行(执行下面所有case块的内容 或 default的内
容),直到碰见break或执行结束为止
循环结构
1、作用
重复的执行相同或相似的代码
2、循环二要素
1、循环条件
循环从什么时候开始,到什么时候结束
2、循环操作
循环中要做的事情(要执行的代码)
ex:
1、控制台中输出100遍Hello World
条件:从第1遍开始 到 第100遍结束
操作:输出 Hello World
2、打印 1-100 之间所有的数字
条件:从第1遍开始 到 第100遍结束
操作:输出 条件 的值
3、while 循环
1、语法
while(循环条件){
循环操作
}
流程:
1、判断循环条件(boolean值/表达式)
2、如果条件为真,则执行循环操作
2.1 执行完操作后,再回来判断条件...
3、如果条件为假,则退出循环
ex:
1、打印 100 遍 Hello World
条件:从 1 开始 ,到 100 结束
操作:打印 Hello World
4、do ... while 循环
语法:
do{
循环操作
}while(循环条件);
流程:
1、先执行循环操作
2、再判断循环条件
3、如果条件为真,则继续执行循环操作,否则退出循环
5、循环的流程控制
1、break
跳出循环结构
2、continue
结束本次循环,继续执行下次循环
6、for 循环
1、while
打印 1-100 之间所有的数字
var i=1;//循环条件的初始化
while(i <= 100){ //循环条件的判断
console.log(i);//循环操作
i++;//更新循环条件
}
2、for 循环
语法:
for(表达式1;表达式2;表达式3){
循环操作
}
表达式1:循环条件的初始化
表达式2:循环条件的判断
表达式3:更新循环条件
流程:
1、先执行表达式1,即循环条件初始化(执行1次)
2、再判断表达式2的值,true 或 false
3、如果为true,则执行循环操作
如果为false,则退出循环结构
4、 执行完循环操作后,再执行表达式3
5、再判断表达式2,同步骤2...
3、循环嵌套
允许在一个循环中再出现另一个循环
for(var i=1;i<=10;i++){ // 外层循环
for(var j=1;j<=10;j++){ //内层循环
}
}
外层循环走一次,内层循环走一轮
函数 - function
1、函数的声明
function 函数名(参数){
函数体
}
1、参数
参数列表,允许声明0或多个参数,多个参数的话,使用 , 隔开即可
2、返回值
返回值是可选的,如果需要返回值的话,通过 return 值 ; 进行返回
2、函数调用
在任意JS的合法位置处,都允许做函数调用
函数名(参数列表);
函数
1、由ES提供的函数
在网页中无需声明,就可以直接使用
已学:parseInt() / parseFloat() / Number()
1、isNaN(value)
判断value是否为非数字
true:不是数字
false:是数字
2、eval()
执行由字符串来表示的JS代码
2、局部变量 与 全局变量
1、全局变量
一经声明后,在JS的任何位置处都能使用的变量就是全局变量
1、
<script>
var uname = "sanfeng.zhang"; //全局变量
function show(){
console.log(uname); //输出 sanfeng.zhang
}
</script>
2、
<script>
function show(){
uname = 'sf.zh';//全局变量,容易出问题
}
</script>
推荐:
全局变量声明的时候
1、使用 var 关键字
2、一律放在<script>中,所有function之外
2、局部变量
使用var关键字,并且声明在 function 中的变量就是局部变量
局部变量的作用域只在声明的函数内,出了函数就不能使用
数组
1、什么是数组
数组(Array)是一个用于保存批量数据的结构,即一个变量中允许保存多个数据。是按照线性结构的方式来保存数据的
2、创建数组
1、创建一个空数组
var 数组名 = [];
2、创建数组并初始化元素
var 数组名 = [元素1,元素2,... ...];
3、创建一个空数组
var 数组名 = new Array();
4、创建数组并初始化元素
var 数组名 = new Array(元素1,元素2,... ...);
3、数组的使用
获取 或 设置数组中的元素,一律都使用下标
下标范围:从0开始,到元素个数-1为止
1、想获取数组中的第2个元素
数组名[1]
2、为数组元素赋值
数组名[下标] = 值;
4、获取数组的长度
属性:length
用法:数组名.length
ex:
var names = ["鸣人","佐助","小樱","卡卡西"];
console.log(names.length);//4
使用场合:
1、配合循环,遍历数组中的每一个元素
2、能够找到数组中,最新要插入元素的位置
var names = ["鸣人","佐助","小樱","卡卡西"];
names[names.length] = "纲手";
5、关联数组
1、什么是关联数组
JS中数组分为索引数组 和 关联数组
索引数组:由数字做下标
关联数组:由字符串做下标
2、声明和使用关联数组
var names = [];
names["xyj"] = "西游记";
names["hlm"] = "红楼梦";
names["shz"] = "水浒传";
console.log(names["hlm"]);
3、注意
length 只能统计出索引数组的长度,而关联数组则不包含在内
4、使用 for ... in 遍历数组
能够遍历数组中所有的数字下标和字符串下标
for(var 变量 in 数组){
变量:数组中所有的数字下标和字符串下标
}
6、数组的常用API
1、toString()
作用:将数组转换为字符串并返回
2、join(seperator)
作用:返回一个由指定连接符连接的数组元素的字符串
参数 seperator :连接符
3、concat(arr1,arr2,...)
作用:拼接多个数组到一起,并返回拼接后的结果
语法:arr.concat(arr1,arr2,...)
注意:该函数并不会改变数组,而是返回拼接后的一个副本
4、reverse()
作用:反转
语法:arr.reverse()
注意:该函数会改变现有数组的结构
5、sort()
1、作用
对先用数组进行排序
默认情况下,按照元素的Unicode码进行排序(升序)
2、注意
该函数会改变现有数组的内容
3、允许通过自定义的排序函数来指定数字的排序规则
语法:
arr.sort(排序函数);
1、指定排序函数
var nums = [38,6,121,76,65,23,1128];
function sortAsc(a,b){
return b - a;
}
nums.sort(sortAsc);
6、进出栈操作
栈式操作:提供了快速操作数组头部或尾部的方法
1、push()
入栈,向数组的尾部添加新元素,并返回新数组的长度
names.push("张无忌");
等同于
names[names.length] = "张无忌";
2、pop()
出栈,删除并返回数组尾部的元素
3、unshift()
向数组的头部增加新元素并返回新数组长度
4、shift()
删除并返回数组头部的元素
7、二维数组
1、什么是二维数组
数组中的数组,在一个数组中的每个元素又是一个数组
2、声明二维数组
var names = [
["贾乃亮","王宝强","陈羽凡"],
["李小璐","马蓉","白百合"]
];
console.log(names[1][1]);
字符串 - string
1、声明字符串
var str1 = "字符串1";
var str2 = String("字符串2");
var str3 = new String("字符串3");
2、length - 属性
作用:返回当前字符串中字符的个数
3、常用函数 - String API
1、大小写转换函数
1、toUpperCase()
返回字符串的完全大写形式
2、toLowerCase()
返回字符串的完全小写形式
ex:
var str = "Hello World";
console.log(str.toUpperCase());
// HELLO WORLD
2、获取指定位置的字符 或 Unicode码
1、charAt(index)
返回指定下标位置处的字符
var msg = "Hello World";
var r = msg.charAt(6);
r : W
2、charCodeAt(index)
返回指定下标位置处的字符的Unicode码(十进制)
var msg = "Hello World";
var r = msg.charCodeAt(6);
r : W的ASCII码
3、检索字符串
1、作用
查询子字符串在指定字符串中的起始下标
2、函数
1、indexOf(value,fromIndex)
value : 要查询的子字符串
fromIndex : 从哪个位置处开始查,如果省略的话,则从头查找
返回值:返回第一次出现子字符串的下标,如果未找到,则返回-1
2、lastIndexOf(value,fromIndex)
作用:查找value最后一次出现的下标
注意:该函数的查找方式是从后向前找
4、截取子字符串
函数:substring(start,end)
作用:返回从start到end-1之间的子字符串,如果省略end的话,则截取到末尾
String 对象
1、分割字符串
函数:split(seperator)
作用:将字符串,通过 seperator 拆分成一个数组
ex:
var msg="张三丰|男|65|19000102";
var arr = msg.split("|");
console.log(arr);
2、模式匹配
1、作用
配合着正则表达式来完成字符串的查找和替换...
2、正则表达式
语法:/正则格式/修饰符
ex:/\d{6}/gim
修饰符:
i : 忽略大小写匹配(Ignorcase)
g : 全局匹配(Global)
m : 允许多行匹配(Multiple)
3、函数
1、replace(substr/regexp,replacement)
作用:使用replacement替换substr/regexp的内容
2、match(substr/regexp)
作用:返回满足substr 或 regexp 格式的子字符串,将这些字符串们放在数组中进行返回
3、search(substr/regexp)
作用:返回满足substr 或 regexp 格式的子字符串第一次出现的下标。如未找到,则返回-1
注意:search函数不支持全局匹配,将自动忽略g
其他内置对象
1、JS的对象分类
1、内置对象 - ES 提供
String,Array,... ...
2、外部对象
1、window (BOM)
2、document (DOM)
3、自定义对象
function
2、RegExp 对象
RegExp : Regular Expression - 正则表达式
1、创建 RegExp 对象
1、var regExp = /匹配模式/修饰符;
var reg1 = /microsoft/g;
var reg2 = /\d{2,6}/g;
2、var regExp=new RegExp("匹配模式","修饰符");
2、RegExp对象的方法
1、regExp.test(string)
string : 要验证的字符串
如果string符合regExp格式的话,则返回true,否则返回 false
3、Math 对象
1、作用
执行与数学相关的运算和数据
2、属性
Math.PI
Math.E
3、函数
1、三角函数
Math.sin(x)
Math.cos(x)
Math.tan(x)
2、计算函数
Math.sqrt(x) : 开方
Math.log(x) : 对数
Math.pow(x,y) : 求 x 的 y 次方
3、数值比较函数
Math.abs(x) : 绝对值
Math.max(a,b,c,d,e,f,g):获取最大值
Math.min(a,b,c,d,e,f,g):获取最小值
Math.random() : 返回0-1之间的随机小数
Math.round(x) : 将 x 四舍五入到整数
4、Date 对象
1、创建Date对象
1、获取当前系统日期时间
var now = new Date();
2、初始化自定的日期时间对象
var date = new Date("2018/01/01");
2、函数
1、读取或设置当前时间的毫秒数
1、getTime()
返回自1970-1-1 00:00:00 以来到 date 之间所经过的毫秒数
2、setTime(毫秒数)
2、读取时间分量函数
1、getFullYear()
获取日期时间对象的年份
2、getYear()
获取子1900年以来到当前日期时间对象所经过的年数
3、getMonth()
返回 0-11 的数字来表示 1-12月
0 : 1月
1 : 2月
...
11 : 12月
4、getDate()
返回当前日期时间对象所对应的日
5、getDay()
返回当前日期时间对象所对应的星期?
返回 0-6 来表示星期日 - 星期六
0 : 日
1 : 一
... ...
6 : 六
6、获取时间
getHours() : 获取 小时
getMinutes() : 获取分钟
getSeconds() : 获取秒
getMilliseconds() : 获取毫秒
7、转换为字符串
1、toString()
2、toLocaleString()
3、toLocaleTimeString()
4、toLocaleDateString()
外部对象
1、BOM 和 DOM
BOM:Browser Object Model - 浏览器对象模型
DOM:Document Object Model - 文档对象模型
2、BOM
1、作用
表示整个浏览器窗口
BOM提供了一个核心对象 - window
2、window 对象的使用
1、属性 和 方法
window对象会包含若干属性 和 方法
属性:
document,location,history,...
方法:
alert() , prompt()
调用window对象的属性和方法时,可以省略window不写
2、window 中的对话框
1、警告框
window.alert() / alert()
2、输入框
window.prompt() / prompt()
3、确认框
window.confirm() / confirm()
按 "确定" 按钮的话,则返回true
其余的操作均返回 false
3、window 中的定时器
1、定时器分类
1、周期性定时器
每间隔一定的时间后,就执行一遍指定程序,反复执行
2、一次性定时器
在指定的时间间隔之后,只执行一次操作
2、周期性定时器
1、声明定时器
var ret = setInterval(fun,time);
fun:要周期性执行的操作,可以是匿名函数
time:时间间隔周期,以毫秒为单位
ret:返回已创建好的定时器对象
2、清除定时器
clearInterval(timer)
timer:创建好的,要停止的定时器对象
3、一次性定时器
1、声明一次性定时器
var ret = setTimeout(fun,time);
fun:指定时间间隔后要执行的操作
time:时间间隔
ret:返回已启动的定时器对象
2、清除定时器
clearTimeout(timer);
3、window 的属性(了解)
1、screen
作用:获取客户端显示器的相关信息
属性:
1、width / height
2、availWidth / availHeight
2、history
1、作用:包含当前窗口所访问过的url地址们
2、属性 和 方法
1、属性
length:访问过的url的数量
2、方法
1、back() --后退
2、forward() --前进
3、go(num)
去往历史记录中的第num个页面
go(1) -- forward()
go(-1) -- back()
3、location
1、作用
表示浏览器地址栏上的信息
2、属性 和 方法
1、href
表示当前窗口中正在浏览的网页的地址
如果为href设置值的话,则相当于是浏览器的跳转功能
2、reload()
重新加载当前网页,等同于刷新
4、navigator
1、作用
包含浏览器的相关信息
2、属性
1、userAgent
显示浏览器相关信息
3、DOM - document对象(重点)
1、document的概述
document对象,是DOM中的顶级对象。封装了和HTML相关的属性,方法和事件。
网页在加在HTML的时候,会在内存中生成一颗节点树(DOM树),DOM树的根就是document。网页上的每个元素其实都是
DOM树上的一个节点。
DOM中所提供的操作:
1、查找节点的信息
2、读取节点的信息
3、修改节点的信息
4、删除节点的信息
5、创建节点的信息
2、查找节点
1、通过元素的id查找节点
var elem = document.getElementById("元素ID");
元素ID:要获取的元素的ID
elem:所得到的元素的对象 - DOM对象/元素
如果没找到匹配的元素,则返回null
DOM对象的常用属性:
1、innerHTML
获取 或 设置当前DOM对象的HTML文本值
2、innerText
获取 或 设置当前DOM对象的文本值
3、value
获取 或 设置表单控件对象的值
3、读取节点的信息
1、节点的类型
1、元素节点
表示页面上的一个元素
2、属性节点
表示页面上元素的一个属性
3、文本节点
表示页面上元素中的一个文本内容
4、注释节点
表示网页上的一个注释
5、文档节点
表示html文档
属性:nodeType
值:
返回1 :元素节点
返回2 :属性节点
返回3 :文本节点
返回8 :注释节点
返回9 :文档节点
2、节点的名称
属性:nodeName
元素节点 和 属性节点:元素名 或 属性名
文本节点:#text
文档节点:#document
注释节点:#comment
4、获取 或 设置元素节点的属性
1、getAttribute(attrName)
作用:获取某元素指定的属性值
attrName:要获取的属性的名称
返回值:attrName属性名对应的值
注意:获取的属性值,必须要在标记中编写出来,否则值为null
2、setAttribute(attrName,attrValue)
作用:修改指定属性的值
attrName:要修改的属性名
attrValue:要设定的值
3、removeAttribute(attrName)
作用:将attrName属性从元素中删除数去
DOM
1、元素的样式
1、使用setAttribute()设置class属性的值
elem.setAttribute("class","类选择器");
2、使用元素的 className 属性修改class值
elem.className="类选择器";
3、自定义元素样式
elem.style.css属性=值;
注意:
如果css属性名中包含 - 的话,连字符(-)要取消,并且 - 后面的第一个字符要变大写
ex:
$("d1").style.color = "red";
$("d1").style.fontSize="18px";
$("d1").style.borderRightColor="yellow";
2、查询节点
1、通过id查询
var elem=document.getElementById("id");
2、通过标签名查询
语法:document|elem.getElementsByTagName(标签名)
document.getElementsByTagName(标签名)
elem.getElementsByTagName(标签名)
ex:
1、document.getElementsByTagName("p")
2、
var div = document.getElementById("d1");
div.getElementsByTagName("p")
返回值:由指定标签元素所组成的数组
3、通过元素的name属性值来查询节点
优先使用在 单选按钮 和 复选框中的
语法:document.getElementsByName(name)
返回值:返回由指定name值的元素所组成的数组
4、根据元素的class值查询节点
语法:document|elem.getElementsByClassName(className)
返回值:由指定className值的元素所组成的数组
5、根据节点的层级关系查找节点
1、parentNode
返回当前元素的父节点
2、childNodes
返回当前元素的所有子节点
注意:该属性会获取到元素节点,文本节点(包含空格和回车)以及注释节点
3、children
返回当前元素的所有子节点(元素节点)
4、nextSibling
返回当前元素的下一个兄弟节点
5、nextElementSibling
返回当前元素的下一个元素兄弟节点
6、previousSibling
返回当前元素的上一个兄弟节点
7、previousElementSibling
返回当前元素的上一个元素兄弟节点
3、增加节点
1、创建元素节点
var elem=document.createElement("元素名");
elem:表示创建好的DOM元素
2、增加节点
1、document.body.appendChild(elem)
向body中追加新元素elem
2、parentNode.appendChild(elem)
parentNode:表示的是已存在的一个元素
将elem追加到parentNode的内部
3、parentNode.insertBefore(newElem,oldElem)
将newElem元素插入到parentNode中oldElem之前
4、删除节点
删除节点只能由父元素来发起
1、document.body.removeChild(elem);
删除body中的elem元素
2、parentNode.removeChild(elem);
在 parentNode 中删除 elem 元素
事件
1、什么是事件
允许通过特殊的行为来激发的操作
2、常用的事件
1、鼠标事件
click :鼠标单击事件
mouseover :鼠标进入到元素时激发的事件
mousemove :鼠标在元素内移动时激发的事件
mouseout :鼠标从元素内移出时激发的事件
2、键盘事件
keydown :键位按下时的事件
keypress:键位按下时的事件
keyup :键位抬起时的事件
3、状态改变事件
load :当元素加载完毕时触发的事件
change :当元素发生改变时触发的事件
focus :当元素获取焦点时触发的事件
blur :当元素失去焦点时触发的事件
submit :当表单被提交时触发的事件
注意:当为html元素绑定事件时,必须要在事件名称前加 on
1、为某元素绑定load事件 -> onload
2、为某元素绑定focus事件 -> onfocus
3、绑定事件的方式
1、在元素中绑定事件
<button onclick=""></button>
<input onblur="" onfocus="" onclick="">
2、在js中动态的为元素绑定事件
<script>
var div = $("d1");
div.on事件名=function(){
}
div.onclick=function(){
}
</script>
4、事件行为详解
1、load 事件
常用场合:当网页加载完毕时,要执行的操作
方式1:在元素中绑定事件
<body onload="函数()"></body>
方式2:JS中动态绑定
<script>
window.onload = function(){
}
</script>
事件
1、事件行为
1、load 事件
2、submit 事件
功能:表单被提交时要触发的事件
注意:通过一个boolean的返回值,通知表单是否被提交
返回值:true,可以提交表单
返回值:false,不能提交表单
3、focus 事件
功能:当元素获取焦点时要触发的事件
4、blur 事件
2、事件对象 (event对象)
1、什么是事件对象
事件对象中封装了事件中要用到的一些参数和一些操作
2、获取事件对象(event对象)
1、html元素中绑定事件
<ANY onclick="btnClick(event)">
<script>
function btnClick(event){
//event表示事件对象
}
</script>
2、使用JS动态绑定
<script>
d1.onclick=function(event){
}
</script>
3、事件对象的常用属性
1、事件源
事件源:表示触发当前事件的元素
获取事件源:
通过 event.target 获取事件源
返回DOM元素
2、鼠标事件
1、offsetX,offsetY
获取鼠标在 元素上 的坐标点
以元素的左上角为(0,0)计算的
2、clientX,clientY
获取鼠标在 网页上 的坐标点
以文档的左上角为(0,0)计算的
3、screenX,screenY
获取鼠标在 显示器上 的坐标点
以显示器的左上角为(0,0)计算的
3、键盘事件
1、event.key
得到 按下的 字符
在 keypress 中 和 keydown 中
1、在 keypress 中
event.which : 表示按下字符的ASCII码
2、在 keydown 中
event.which : 表示的 键位码 ,只记录键位,不记录字符(大小写英文字符的键位码是相同的,一些数字和标点的
键位码有可能是相同的)
4、事件冒泡
1、什么是事件冒泡
当激发子元素的事件时,把父元素对应的事件也一并给执行了
场合:
1、必须是父子元素或具备层级关系的元素
2、为元素们设置了相同的事件
2、阻止事件冒泡
只让事件在当前元素中执行,不向上冒泡
event.stopPropagation();