JavaScript基础笔记
一、JavaScript
1. 概述
-
概念:JS是一门客户端脚本语言
- 运行在客户端浏览器中的。每一个浏览器都有JavaScript的解析引擎
- 脚本语言:不需要编译,直接就可以被浏览器解析执行了
-
功能:
- 可以来增强用户和html页面的交互过程,可以来控制html元素,让页面有一些动态的效果,增强用户的体验。
2. 基础语法
与html结合的方式
JavaScript代码可以直接嵌在网页的任何地方,不过通常我们都把JavaScript代码放到 head 中
-
内部JS:
-
定义
<script>,标签体内容就是js代码 -
<head> <script> alert('Hello, world'); </script> </head>
-
-
外部JS:
-
定义
<script>,通过src属性引入外部的js文件 -
把JavaScript代码放到一个单独的.js文件,然后在HTML中通过
<script src="..."></script>引入这个文件 -
<head> <script src="/static/js/abc.js"></script> </head> -
这样
/static/js/abc.js就会被浏览器执行
-
- 注意:
<script>可以定义在html页面的任何地方。但是定义的位置会影响执行顺序<script>可以定义多个
注释
- 单行注释:
//注释内容 - 多行注释:
/*注释内容*/
数据类型
- 原始数据类型(基本数据类型):
- number:JavaScript不区分整数和浮点数,统一用Number表示 。整数/小数/NaN(NaN表示Not a Number,当无法计算结果时用NaN表示 )
- Number可以直接做四则运算,规则和数学一致
- string:字符串是以单引号'或双引号"括起来的任意文本 。如字符串 "abc" "a" 'abc'
- 布尔值 :true和false
- null:一个对象为空的占位符
- undefined:未定义。如果一个变量没有给初始化值,则会被默认赋值为undefined
- number:JavaScript不区分整数和浮点数,统一用Number表示 。整数/小数/NaN(NaN表示Not a Number,当无法计算结果时用NaN表示 )
- 引用数据类型:对象
变量
-
变量:一小块存储数据的内存空间,变量不仅可以是数字,还可
以是任意数据类型-
变量名是大小写英文、数字、 $ 和 _ 的组合,但不能用数字开头。变量名也不能是JavaScript的关键字,如 if 、 while 等
-
在JavaScript中,使用等号 = 对变量进行赋值。可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,但是要注意只能用 var 申明一次,例如
-
-
var a = 123; // a的值是整数123 a = 'ABC'; // a变为字符串-
打印变量X显示变量的内容,可以用
console.log(x),打开Chrome的控制台就可以看到结果console.log(x);
-
-
Java语言是强类型语言,而JavaScript是弱类型语言。
- 强类型:在开辟变量存储空间时,定义了空间将来存储的数据的数据类型。只能存储固定类型的数据
- 弱类型:在开辟变量存储空间时,不定义空间将来的存储数据类型,可以存放任意类型的数据。
-
语法:
- var 变量名 = 初始化值;
-
typeof运算符:获取变量的类型。
- 注:null运算后得到的是object
运算符
- 一元运算符:只有一个运算数的运算符,如++,-- , +(正号)
- ++ --: 自增(自减)
- ++(--) 在前,先自增(自减),再运算
- ++(--) 在后,先运算,再自增(自减)
- +(-):正负号
- 注意:在JS中,如果运算数不是运算符所要求的类型,那么js引擎会自动的将运算数进行类型转换
- 其他类型转number:
- string转number:按照字面值转换。如果字面值不是数字,则转为NaN(不是数字的数字)
- boolean转number:true转为1,false转为0
- 其他类型转number:
- 赋值运算符
= += -+....
- 比较运算符
< >= <= == ===(全等于)
注意:
- 相等运算符 = ,会自动转换数据类型再比较,很多时候,会得到非常诡异的结果
- === 比较,它不会自动转换数据类型,如果数据类型不一致,返回 false ,如果一致再比较 【使用】
-
比较方式
- 类型相同:直接比较
- 字符串:按照字典顺序比较。按位逐一比较,直到得出大小为止
- 类型不同:先进行类型转换,再比较
- ===:全等于。在比较之前,先判断类型,如果类型不一样,则直接返回false
- 类型相同:直接比较
-
逻辑运算符
- &&:与运算
- ||:或运算
- !:非运算
- 其他类型转boolean:
- number:0或NaN为假,其他为真
- string:除了空字符串(""),其他都是true
- null&undefined:都是false
- 对象:所有对象都为true
-
三元运算符
表达式? 值1:值2;- 判断表达式的值,如果是true则取值1,如果是false则取值2
-
流程控制语句
-
if...else...
-
var age = 3; if (age >= 18) { alert('adult'); } else if (age >= 6) { alert('teenager'); } else { alert('kid'); }
-
-
switch(变量)
- 在java中,switch语句可以接受的数据类型:
- byte,int,shor,char,枚举(1.5) ,String(1.7)
- 在JS中,switch语句可以接受任意的原始数据类型
- 在java中,switch语句可以接受的数据类型:
-
while
-
do...while
-
for
-
//基础语法: var x = 0; var i; for (i=1; i<=10000; i++) { x = x + i; } x ; // 50005000 -
//遍历数组: var arr = ['Apple', 'Google', 'Microsoft']; var i, x; for (i=0; i<arr.length; i++) { x = arr[i]; console.log(x); }
-
-
for ... in :它可以把一个对象的所有属性依次循环出来
-
var o = { name: 'Jack', age: 20, city: 'Beijing' }; for (var key in o) { if (o.hasOwnProperty(key)) { console.log(key); // 'name', 'age', 'city' } } -
由于 Array 也是对象,而它的每个元素的索引被视为对象的属性,所以遍历出来是下标
-
var a = ['A', 'B', 'C']; for (var i in a) { console.log(i); // '0', '1', '2' console.log(a[i]); // 'A', 'B', 'C' } -
注意: for ... in 对 Array 的循环得到的是 String 而不是 Number
-
-
-
JS特殊语法
- 语句以;结尾,如果一行只有一条语句则
;可以省略 (不建议) - 变量的定义使用var关键字,也可以不使用
- 用
:定义的变量是局部变量 - 不用
:定义的变量是全局变量(不建议)
- 用
- 语句以;结尾,如果一行只有一条语句则
对象
JavaScript的对象是一种无序的集合数据类型,它由若干键值对组成。用于描述现实世界中的某个对象 。如:
var person = {
name: '小明',
birth: 1990,
school: 'No.1 Middle School',
height: 1.70,
weight: 65,
score: null
}
- 定义一个对象:
var 对象名 = {
key: 'value',
key: 'value',
key: 'value'
}
- 获取对象的属性
对象.属性
- 由于JavaScript的对象是动态类型,可以自由地给一个对象添加或删除属性
var xiaoming = {
name: '小明'
};
xiaoming.age; // undefined
xiaoming.age = 18; // 新增一个age属性
xiaoming.age; // 18
delete xiaoming.age; // 删除age属性
xiaoming.age; // undefined
delete xiaoming['name']; // 删除name属性
xiaoming.name; // undefined
delete xiaoming.school; // 删除一个不存在的school属性也不会报错
- 若要检测对象是否拥有某一属性,可以用 in 操作符
var xiaoming = {
name: '小明',
birth: 1990,
school: 'No.1 Middle School',
height: 1.70,
weight: 65,
score: null
};
'name' in xiaoming; // true
'grade' in xiaoming; // false
如果用 in 判断一个属性存在,这个属性不一定是这个对象的,可能是这个对象继承得到的:
'toString' in xiaoming; // true
因为 toString 定义在 object 对象中,而所有对象最终都会在原型链上指向 object,所以xiaoming 也拥有 toString 属性。
要判断一个属性是否是 xiaoming 自身拥有的,而不是继承得到的,可以用 hasOwnProperty() 方法:
var xiaoming = {
name: '小明'
};
xiaoming.hasOwnProperty('name'); // true
xiaoming.hasOwnProperty('toString'); // false
3. 函数
函数定义和调用
定义(创建)函数的三种方式:
-
var fun = new Function(形式参数列表,方法体); //已不用 -
function方法名称(形式参数列表){ 方法体 } -
var 方法名 = function(形式参数列表){ 方法体 };- 在这种方式下,
function (形式参数列表) { ... }是一个匿名函数,它没有函数名 - 按照完整语法需要在函数体末尾加一个
;,表示赋值语句结
束
- 在这种方式下,
调用函数时,按顺序传入参数即可
- 由于JavaScript允许传入任意个参数而不影响调用,因此传入的参数比定义的参数多于少都没有问题
方法
定义方法 :
-
在一个对象中绑定函数,称为这个对象的方法
-
var xiaoming = { name: '小明', birth: 1990, age: function () { var y = new Date().getFullYear(); return y - this.birth; } }; xiaoming.age; // function xiaoming.age() xiaoming.age(); // 今年调用是25,明年调用就变成26了- 在一个方法内部, this 是一个特殊变量,它始终指向当前对象,也就是 xiaoming 这个变量。所以, this.birth 可以拿到 xiaoming 的 birth 属性
注意:
若把上面的拆开写:
function getAge() {
var y = new Date().getFullYear();
return y - this.birth;
} v
ar xiaoming = {
name: '小明',
birth: 1990,
age: getAge
};
xiaoming.age(); // 25, 正常结果
getAge(); // NaN
单独调用函数 getAge() 怎么返回了 NaN ?请注意,我们已经进入到了JavaScript的一个大坑里。
JavaScript的函数内部如果调用了 this ,那么这个 this 到底指向谁?
答案是,视情况而定!
如果以对象的方法形式调用,比如 xiaoming.age() ,该函数的 this 指向被调用的对象,也就
是 xiaoming ,这是符合我们预期的。
如果单独调用函数,比如 getAge() ,此时,该函数的 this 指向全局对象,也就是 window
属性
length:代表形参的个数
特点
- 方法定义是,形参的类型不用写,返回值类型也不写。
- 方法是一个对象,如果定义名称相同的方法,会覆盖
- 在JS中,方法的调用只与方法的名称有关,和参数列表无关
- 在方法声明中有一个隐藏的内置对象(数组),arguments,封装所有的实际参数
调用
方法名称(实际参数列表);
4. 常用对象
① Function对象
函数对象
② Array数组对象
-
创建
var arr = new Array(元素列表);var arr = new Array(默认长度);var arr = [元素列表];
-
方法
-
join(参数):将数组中的元素按照指定的分隔符拼接为字符串-
var arr = ['A', 'B', 'C', 1, 2, 3]; arr.join('-'); // 'A-B-C-1-2-3'
-
-
push():向数组的末尾添加一个或更多元素,并返回新的长度 -
pop():把 Array 的最后一个元素删除掉-
var arr = [1, 2]; arr.push('A', 'B'); // 返回Array新的长度: 4 arr; // [1, 2, 'A', 'B'] arr.pop(); // pop()返回'B'
-
-
concat():把当前的 Array 和另一个 Array 连接起来,并返回一个新的 Array-
var arr = ['A', 'B', 'C']; arr.concat(1, 2, [3, 4]); // ['A', 'B', 'C', 1, 2, 3, 4] -
注意, concat() 方法并没有修改当前 Array ,而是返回了一个新的 Array
-
实际上, concat() 方法可以接收任意个元素和 Array ,并且自动把 Array 拆开,然后全部添加到新的 Array 里
-
-
-
属性:
-
length:数组的长度 -
特点:
- JS中,数组元素的类型可变的
- JS中,数组长度可变的
③ Date日期对象
在JavaScript中, Date 对象用来表示日期和时间
- 创建:
var date = new Date();
- 方法:
toLocaleString():返回当前date对象对应的时间本地字符串格式etTime():获取毫秒值。返回当前如期对象描述的时间到1970年1月1日零点的毫秒值差
④ Math数学对象
- 创建:
- 特点:Math对象不用创建,直接使用
Math.方法名();
- 方法:
- random():返回 0 ~ 1 之间的随机数,含0不含1
- ceil(x):对数进行上舍入
- floor(x):对数进行下舍入
- round(x):把数四舍五入为最接近的整数
- 属性:
- PI
⑤ RegExp正则表达式
-
正则表达式:定义字符串的组成规则
- 单个字符:
[]。如: [a]、 [ab]、[a-zA-Z0-9_]- 特殊符号代表特殊含义的单个字符:
\d:单个数字字符 [0-9]\w:单个单词字符[a-zA-Z0-9_]
- 特殊符号代表特殊含义的单个字符:
- 量词符号:
?表示出现0次或1次*表示出现0次或多次+出现1次或多次{m,n}表示 m<= 数量 <= n- m如果缺省: {,n}:最多n次
- n如果缺省:{m,} 最少m次
- 开始结束符号:
^开始$结束
- 单个字符:
-
正则对象:
- 创建:
var reg = new RegExp("正则表达式");var reg = /正则表达式/;
- 方法:
test(参数):验证指定的字符串是否符合正则定义的规范
- 创建:
⑥ Global对象
- 特点:
- 全局对象,Global中封装的方法不需要对象就可以直接调用:
方法名();
- 全局对象,Global中封装的方法不需要对象就可以直接调用:
- 方法:
- encodeURI():url编码
- decodeURI():url解码
- encodeURIComponent():url编码,编码的字符更多
- decodeURIComponent():url解码
- parseInt():将字符串转为数字
- 逐一判断每一个字符是否是数字,直到不是数字为止,将前边数字部分转为number
- isNaN():判断一个值是否是NaN
- NaN六亲不认,连自己都不认。NaN参与的==比较全部问false
- eval():讲 JavaScript 字符串,并把它作为脚本代码来执行
- URL编码
四、操作BOM
1. 概念
-
浏览器:JavaScript的出现是为了能在浏览器中运行,所以浏览器自然是JavaScript开发者必须要关注的
- 主流的浏览器大概这么几种 :
- IE 6~11:国内用得最多的IE浏览器,历来对W3C标准支持差。从IE10开始支持ES6标准
- Chrome:Google出品的基于Webkit内核浏览器,内置了非常强悍的JavaScript引擎——V8。由于Chrome安装就时刻保持自升级,所以不用管它的版本
- Safari:Apple的Mac系统自带的基于Webkit内核的浏览器
- Firefox:Mozilla自己研制的Gecko内核和JavaScript引擎OdinMonkey。早期的Firefox按版本发布,后来聪明地学习Chrome的做法进行自升级,时刻保持最新
- 不同的浏览器对JavaScript支持的差异主要是:
- 有些API的接口不一样,比如A JAX,File接口。对于ES6标
准,不同的浏览器对各个特性支持也不一样 - 在编写JavaScript的时候,就要充分考虑到浏览器的差异,尽量让同一BDM份JavaScript代码能运行在不同的浏览器中
- 有些API的接口不一样,比如A JAX,File接口。对于ES6标
- 主流的浏览器大概这么几种 :
-
BOM:Browser Object Model 浏览器对象模型
- 将浏览器的各个组成部分封装成对象。
- 组成:
- Window:窗口对象
- Navigator:浏览器对象
- Screen:显示器屏幕对象
- History:历史记录对象
- Location:地址栏对象
2. Window窗口对象
window 对象不但充当全局作用域,而且表示浏览器窗口。window 对象有 innerWidth 和 innerHeight 属性,可以获取浏览器窗口的内部宽度和高度【内部宽高是指除去菜单栏、工具栏、边框等占位元素后,用于显示网页的净宽高 】
-
兼容性:IE<=8不支持
-
创建
-
常用方法:
- 与弹出框有关的方法
- alert() 显示带有一段消息和一个确认按钮的警告框
- confirm() 显示带有一段消息以及确认按钮和取消按钮的对话框【常用】
- 如果用户点击确定按钮,则方法返回true
- 如果用户点击取消按钮,则方法返回false
- prompt() 显示可提示用户输入的对话框
- 返回值:获取用户输入的值
- 与打开关闭有关的方法:
- close() 关闭浏览器窗口。
- 谁调用我 ,我关谁
- open() 打开一个新的浏览器窗口
- 返回新的Window对象
- close() 关闭浏览器窗口。
- 与定时器有关的方式
- setTimeout() 在指定的毫秒数后调用函数或计算表达式。
- 参数:
1. js代码或者方法对象
2. 毫秒值 - 返回值:唯一标识,用于取消定时器
- 参数:
- clearTimeout():取消由 setTimeout() 方法设置的 timeout。
- setInterval():按照指定的周期(以毫秒计)来调用函数或计算表达式
- clearInterval():取消由 setInterval() 设置的 timeout。
- setTimeout() 在指定的毫秒数后调用函数或计算表达式。
- 与弹出框有关的方法
-
属性:
- 获取其他BOM对象:
history
location
Navigator
Screen: - 获取DOM对象
document
- 获取其他BOM对象:
-
特点
- Window对象不需要创建可以直接使用 window使用。 window.方法名();
- window引用可以省略。 方法名();
3. Navigator浏览器对象
navigator 对象表示浏览器的信息,最常用的属性包括 :
- navigator.appName:浏览器名称
- navigator.appVersion:浏览器版本;
- navigator.language:浏览器设置的语言;
- navigator.platform:操作系统类型;
- navigator.userAgent:浏览器设定的 User-Agent 字符串
'use strict';
console.log('appName = ' + navigator.appName);
console.log('appVersion = ' + navigator.appVersion);
console.log('language = ' + navigator.language);
console.log('platform = ' + navigator.platform);
console.log('userAgent = ' + navigator.userAgent);
注意:navigator 的信息很容易地被用户修改,所以JavaScript读取的值不一定是正确的。为了针对不同浏览器编写不同的代码,可以用 JavaScript 对不存在属性返回undefined 的特性,直接用短路运算符 || 计算:
var width = window.innerWidth || document.body.clientWidth;
4. Screen显示器屏幕对象
screen 对象表示屏幕的信息,常用的属性有:
- screen.width:屏幕宽度,以像素为单位;
- screen.height:屏幕高度,以像素为单位;
- screen.colorDepth:返回颜色位数,如8、16、24。
console.log('Screen size = ' + screen.width + ' x ' + screen.height);
5. Location地址栏对象
location 对象表示当前页面的URL信息。例如一个完整的URL:
http://www.example.com:8080/path/index.html?a=1&b=2#TOP
可以用 location.href 获取。要获得URL各个部分的值,可以这么写 :
location.protocol; // 'http'
location.host; // 'www.example.com'
location.port; // '8080'
location.pathname; // '/path/index.html'
location.search; // '?a=1&b=2'
location.hash; // 'TOP'
要加载一个新页面,可以调用 location.assign() 。如果要重新加载当前页面,调用location.reload() 方法非常方便
- 创建:
- window.location
- location
- 方法:
- reload():重新加载当前页面刷新
- 属性:
- href:设置或返回完整的 URL。
6. document
document 对象表示当前页面。由于HTML在浏览器中以DOM形式表示为树形结构, document 对象就是整个DOM树的根节点
document 的 title 属性是从HTML文档中的 xxx 读取的,但是可以动态改变:
document.title = '你好Java!';
浏览器窗口标题发生变化。
要查找DOM树的某个节点,需要从 document 对象开始查找。最常用的查找是根据ID和Tag Name。先准备HTML数据:
<dl id="code-menu" style="border:solid 1px #ccc;padding:6px;">
<dt>Java</dt>
<dd>Spring</dd>
<dt>Python</dt>
<dd>Django</dd>
<dt>Linux</dt>
<dd>Docker</dd>
</dl>
用 document 对象提供的 getElementById() 和 getElementsByTagName() 可以按ID获得一个DOM节点和按Tag名称获得一组DOM节点:
var menu = document.getElementById('code-menu');
var drinks = document.getElementsByTagName('dt');
var i, s;
s = '提供的饮料有:';
for (i=0; i<drinks.length; i++) {
s = s + drinks[i].innerHTML + ',';
} c
onsole.log(s);
document 对象还有一个 cookie 属性,可以获取当前页面的Cookie。
Cookie是由服务器发送的key-value标示符。因为HTTP协议是无状态的,但是服务器要区分到底是哪个用户发过来的请求,就可以用Cookie来区分。当一个用户成功登录后,服务器发送一个Cookie给浏览器,例如 user=ABC123XYZ(加密的字符串)... ,此后,浏览器访问该网站时,会在请求头附上这个Cookie,服务器根据Cookie即可区分出用户。
Cookie还可以存储网站的一些设置,例如,页面显示的语言等等。JavaScript可以通过 document.cookie 读取到当前页面的Cookie:
document.cookie; // 'v=123; remember=true; prefer=zh'
由于JavaScript能读取到页面的Cookie,而用户的登录信息通常也存在Cookie中,这就造成了巨大的安全隐患,这是因为在HTML页面中引入第三方的JavaScript代码是允许的:
<!--www.example.com-->
<html>
<head>
<script src="http://www.foo.com/jquery.js"></script>
</head>
...
</html>
如果引入的第三方的JavaScript中存在恶意代码,则 www.foo.com 网站将直接获取到www.example.com 网站的用户登录信息。
为了解决这个问题,服务器在设置Cookie时可以使用 httpOnly ,设定了 httpOnly 的Cookie将不能被JavaScript读取。这个行为由浏览器实现,主流浏览器均支持 httpOnly 选项,IE从IE6 SP1开始支持。
为了确保安全,服务器端在设置Cookie时,应该始终坚持使用 httpOnly
7. History历史记录对象
history 对象保存了浏览器的历史记录,JavaScript可以调用 history 对象的 back() 或 forward () ,相当于用户点击了浏览器的“后退”或“前进”按钮。
这个对象属于历史遗留对象,对于现代Web页面来说,由于大量使用A JAX和页面交互,简单粗暴地调用 history.back() 可能会让用户感到非常愤怒。
新手开始设计Web页面时喜欢在登录页登录成功时调用 history.back() ,试图回到登录前的页面。这是一种错误的方法。
任何情况,都不应该使用 history 这个对象了
五、操作DOM
1. 选择器
由于HTML文档被浏览器解析后就是一棵DOM树,要改变HTML的结构,就需要通过JavaScript来操作DOM
始终记住DOM是一个树形结构。操作一个DOM节点实际上就是这么几个操作:
- 更新:更新该DOM节点的内容,相当于更新了该DOM节点表示的HTML的内容;
- 遍历:遍历该DOM节点下的子节点,以便进行进一步操作;
- 添加:在该DOM节点下新增一个子节点,相当于动态增加了一个HTML节点;
- 删除:将该节点从HTML中删除,相当于删掉了该DOM节点的内容以及它包含的所有子节点 在操作一个DOM节点前,我们需要通过各种方式先拿到这个DOM节点。最常用的方法是
document.getElementById()和document.getElementsByTagName(),以及CSS选择器document.getElementsByClassName()由于ID在HTML文档中是唯一的,所以document.getElementById()可以直接定位唯一的一个DOM节点。document.getElementsByTagName()和document.getElementsByClassName()总是返回一组DOM节点
要精确地选择DOM,可以先定位父节点,再从父节点开始选择,以缩小范围
// 返回ID为'test'的节点:
var test = document.getElementById('test');
// 先定位ID为'test-table'的节点,再返回其内部所有tr节点:
var trs = document.getElementById('test-table').getElementsByTagName('tr');
// 先定位ID为'test-div'的节点,再返回其内部所有class包含red的节点:
var reds = document.getElementById('testdiv').getElementsByClassName('red');
// 获取节点test下的所有直属子节点:
var cs = test.children;
// 获取节点test下第一个、最后一个子节点:
var first = test.firstElementChild;
var last = test.lastElementChild
第二种方法是使用querySelector()和querySelectorAll() ,需要了解selector语法,然后使用条件来获取节点,更加方便:
// 通过querySelector获取ID为q1的节点:
var q1 = document.querySelector('#q1');
// 通过querySelectorAll获取q1节点内的符合条件的所有节点:
var ps = q1.querySelectorAll('div.highlighted > p');
注意:低版本的IE<8不支持 querySelector 和 querySelectorAll 。IE8仅有限支持
2.DOM
DOM即 Document Object Model 文档对象模型,将标记语言文档的各个组成部分封装为对象。可以使用这些对象,对标记语言文档进行CRUD的动态操作
DOM 标准被分为 3 个不同的部分:
-
核心 DOM - 针对任何结构化文档的标准模型
- Document:文档对象
- 方法:
- 获取Element对象:
- getElementById() : 根据id属性值获取元素对象。id属性值一般唯一
- getElementsByTagName():根据元素名称获取元素对象们。返回值是一个数组
- getElementsByClassName():根据Class属性值获取元素对象们。返回值是一个数组
- getElementsByName(): 根据name属性值获取元素对象们。返回值是一个数组
- 创建其他DOM对象:
- createAttribute(name)
- createComment()
- createElement()
- createTextNode()
- 获取Element对象:
- 属性
- Element:元素对象
- 获取/创建:通过document来获取和创建
- 方法:
- removeAttribute():删除属性
- setAttribute():设置属性
- Attribute:属性对象
- Text:文本对象
- Comment:注释对象
- Node:节点对象,其他5个的父对象
- 特点:所有dom对象都可以被认为是一个节点
- 方法:
- CRUD dom树:
- appendChild():向节点的子节点列表的结尾添加新的子节点。
- removeChild() :删除(并返回)当前节点的指定子节点。
- replaceChild():用新节点替换一个子节点。
- 属性:
- parentNode 返回节点的父节点。
-
XML DOM - 针对 XML 文档的标准模型
-
HTML DOM - 针对 HTML 文档的标准模型
-
标签体的设置和获取:innerHTML
-
使用html元素对象的属性
-
控制元素样式
-
使用元素的style属性来设置。如:
-
//修改样式方式1 div1.style.border = "1px solid red"; div1.style.width = "200px"; //font-size--> fontSize div1.style.fontSize = "20px"; -
提前定义好类选择器的样式,通过元素的className属性来设置其class属性值
-
-
六、事件监听机制
1. 概念
- 某些组件被执行了某些操作后,触发某些代码的执行
- 事件:某些操作
- 如单击,双击,键盘按下,鼠标移动等
- 事件源:组件
- 如: 按钮 文本输入框..
- 监听器:代码。
- 注册监听:将事件,事件源,监听器结合在一起
- 当事件源上发生了某个事件,则触发执行某个监听器代码。
2. 常见事件
点击事件
- onclick:单击事件
- ondblclick:双击事件
焦点事件
- onblur:失去焦点
- onfocus:元素获得焦点。
加载事件
- onload:一张页面或一幅图像完成加载
鼠标事件
- onmousedown 鼠标按钮被按下。
- onmouseup 鼠标按键被松开。
- onmousemove 鼠标被移动。
- onmouseover 鼠标移到某元素之上。
- onmouseout 鼠标从某元素移开。
键盘事件
- onkeydown 某个键盘按键被按下。
- onkeyup 某个键盘按键被松开。
- onkeypress 某个键盘按键被按下并松开。
选择和改变
- onchange 域的内容被改变。
- onselect 文本被选中。
表单事件
- onsubmit 确认按钮被点击。
- onreset 重置按钮被点击。

浙公网安备 33010602011771号