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 就会被浏览器执行

  • 注意:
    1. <script>可以定义在html页面的任何地方。但是定义的位置会影响执行顺序
    2. <script>可以定义多个

注释

  1. 单行注释://注释内容
  2. 多行注释:/*注释内容*/

数据类型

  • 原始数据类型(基本数据类型):
    • number:JavaScript不区分整数和浮点数,统一用Number表示 。整数/小数/NaN(NaN表示Not a Number,当无法计算结果时用NaN表示 )
      • Number可以直接做四则运算,规则和数学一致
    • string:字符串是以单引号'或双引号"括起来的任意文本 。如字符串 "abc" "a" 'abc'
    • 布尔值 :true和false
    • null:一个对象为空的占位符
    • undefined:未定义。如果一个变量没有给初始化值,则会被默认赋值为undefined
  • 引用数据类型:对象

变量

  • 变量:一小块存储数据的内存空间,变量不仅可以是数字,还可
    以是任意数据类型

    • 变量名是大小写英文、数字、 $ 和 _ 的组合,但不能用数字开头。变量名也不能是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
  • 赋值运算符
    = += -+....
  • 比较运算符

< >= <= == ===(全等于)

注意:

  • 相等运算符 = ,会自动转换数据类型再比较,很多时候,会得到非常诡异的结果
  • === 比较,它不会自动转换数据类型,如果数据类型不一致,返回 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语句可以接受任意的原始数据类型
    • 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中封装的方法不需要对象就可以直接调用:方法名();
  • 方法:
    • 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代码能运行在不同的浏览器中
  • 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对象
    • 与定时器有关的方式
      • setTimeout() 在指定的毫秒数后调用函数或计算表达式。
        • 参数:
          1. js代码或者方法对象
          2. 毫秒值
        • 返回值:唯一标识,用于取消定时器
      • clearTimeout():取消由 setTimeout() 方法设置的 timeout。
      • setInterval():按照指定的周期(以毫秒计)来调用函数或计算表达式
      • clearInterval():取消由 setInterval() 设置的 timeout。
  • 属性:

    • 获取其他BOM对象:
      history
      location
      Navigator
      Screen:
    • 获取DOM对象
      document
  • 特点

    • 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:元素对象
    • 获取/创建:通过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 重置按钮被点击。

posted @ 2020-06-28 23:12  弥漫s  阅读(101)  评论(0)    收藏  举报