JS-API-1

JS学习笔记6(API-DOM)

前面基础部分笔记较简略,这里开始做细致的记录

==(DOM-获取元素)==

const

1
2
3
4
const array=['a','b','c'];

array.push('d');

不会报错,因为地址没有修改,改变的是地址指向的内容。

声明变量优先给const,后续需要修改再改为let

==建议数组和对象使用const声明==

介绍

概念

ECMAScript 简称 ES 它提供了一套语言标准规范,如变量、数据类型、表达式、语句、函数等语法规则都是由 ECMAScript 规定的。浏览器将 ECMAScript 大部分的规范加以实现,并且在此基础上又扩展一些实用的功能,这些被扩展出来的内容我们称为 Web APIs。

6-1

  • 使用JS去操作HTML和浏览器
  • 分类:DOM(文档对象模型)和BOM(浏览器对象模型)

DOM(Document Object Model)是将整个 HTML 文档的每一个标签元素视为一个对象,这个对象下包含了许多的属性和方法,通过操作这些属性或者调用这些方法实现对 HTML 的动态更新,为实现网页特效以及用户交互提供技术支撑。

简言之 DOM 是用来动态修改 HTML 的,其目的是开发网页特效及用户交互。

DOM树

  • 将HTML文档以树状结构直观的表现出来,我们称之为文档树或DOM树
  • 作用:直观的体现了标签与标签之间的关系

DOM对象

浏览器根据HTML标签生成的JS对象

  • 文档树的每一个节点都是一个DOM对象

核心思想:把网页内容当作对象处理

==document是DOM里最大的对象==

document 是 JavaScript 内置的专门用于 DOM 的对象,该对象包含了若干的属性和方法,document 是学习 DOM 的核心。

1
2
3
4
5
6
7
8
9
10
11
12
13
<script>
// document 是内置的对象
// console.log(typeof document);

// 1. 通过 document 获取根节点
console.log(document.documentElement); // 对应 html 标签

// 2. 通过 document 节取 body 节点
console.log(document.body); // 对应 body 标签

// 3. 通过 document.write 方法向网页输出内容
document.write('Hello World!');
</script>

获取DOM对象

(根据CSS选择器的方式)

选中匹配的第一个元素

querySelsecor() 参数包含一个或多个有效的字符串

返回选择器匹配的第一个元素,

1
2
3
4
<script>
const p = document.querySelector('p') // 获取第一个p元素
/*引号里面是选择器*/
</script>

选择匹配的元素集合

querySelectAll()

返回选择器匹配的对象集合,伪数组(有长度有索引,没有pop,push等方法)

  • 通过for遍历得到每一个对象

其他方法

操作对象

操作标签内容

  1. 对象.innerText

    只识别文本,不解析标签

  2. 对象.innerHtml

    能识别文本,解析标签

操作常用属性

直接能过属性名修改

1
2
3
4
5
6
7
8
<script>
// 1. 获取 img 对应的 DOM 元素
const pic = document.querySelector('.pic')
// 2. 修改属性
pic.src = './images/lion.webp'
pic.width='400px'
pic.alt = '图片不见了...'
</script>

操作元素样式属性

style

应用【修改样式】,通过修改行内样式 style 属性,实现对样式的动态修改。

通过元素节点获得的 style 属性本身的数据类型也是对象,如 box.style.colorbox.style.width 分别用来获取元素节点 CSS 样式的 colorwidth 的值。

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">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>练习 - 修改样式</title>
</head>
<body>
<div class="box">随便一些文本内容</div>
<script>
// 获取 DOM 节点
const box = document.querySelector('.intro')
box.style.color = 'red'
box.style.width = '300px'
// css 属性的 - 连接符与 JavaScript 的 减运算符
// 冲突,所以要改成驼峰法
box.style.backgroundColor = 'pink'
</script>
</body>
</html>
(注意属性名有-,用小驼峰命名)

修改样式比较少的情况下有优势

生成的是行内样式表,权重比较高

className

如果修改的样式比较多,直接通过style属性修改比较繁琐,我们可以通过借助于css类名的形式。

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">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>练习 - 修改样式</title>
<style>
.pink {
background: pink;
color: hotpink;
}
</style>
</head>
<body>
<div class="box">随便一些文本内容</div>
<script>
// 获取 DOM 节点
const box = document.querySelector('.box')
box.className = 'box pink'
</script>
</body>
</html>

1.由于class是关键字, 所以使用className去代替

2.className是使用新值换旧值, 如果需要添加一个类,需要保留之前的类名’box pink’

==classList==

为了解决className 容易覆盖以前的类名,我们可以通过classList方式追加和删除类名

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
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div {
width: 200px;
height: 200px;
background-color: pink;
}

.active {
width: 300px;
height: 300px;
background-color: hotpink;
margin-left: 100px;
}
</style>
</head>

<body>

<div class="one"></div>
<script>
// 1.获取元素
// let box = document.querySelector('css选择器')
let box = document.querySelector('div')
// add是个方法 添加 追加 类名不加点,并且是字符串
// box.classList.add('active')
// remove() 移除 类
// box.classList.remove('one')
// 切换类 原来有这个类就删除,没有就加上
box.classList.toggle('one')
</script>
</body>

</html>

操作表单元素属性

表单很多情况,也需要修改属性,比如点击眼睛,可以看到密码,本质是把表单类型转换为文本框

正常的有属性有取值的跟其他的标签属性没有任何区别

(得到表单的值用value)

获取:DOM对象.属性名

设置: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
31
32
33
34
35
36

<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>

</head>

<body>
<input type="text" value="请输入">
<button disabled>按钮</button>
<input type="checkbox" name="" id="" class="agree">
<script>
// 1. 获取元素
let input = document.querySelector('input')
// 2. 取值或者设置值 得到input里面的值可以用 value
// console.log(input.value)
input.value = '小米手机'
input.type = 'password'

// 2. 启用按钮
let btn = document.querySelector('button')
// disabled 不可用 = false 这样可以让按钮启用
btn.disabled = false
// 3. 勾选复选框
let checkbox = document.querySelector('.agree')
checkbox.checked = true
checkbox.checked='true' (也能选中,有默认的隐式转换,除了空字符串是false)
</script>
</body>

</html>

自定义属性

自定义属性:

在html5中推出来了专门的data-自定义属性

在标签上一律以data-开头

在DOM对象上一律以dataset对象方式获取

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>

</head>

<body>
<div data-id="1"> 自定义属性 </div>
<script>
// 1. 获取元素
let div = document.querySelector('div')
// 2. 获取自定义属性值
console.log(div.dataset.id)

</script>
</body>

</html>

定时器-间歇函数

setInterval 是 JavaScript 中内置的函数,它的作用是间隔固定的时间自动重复执行另一个函数,也叫定时器函数。

1
2
3
4
5
6
setInterval(函数,间隔时间);
setInterval(function(){},1000);单位是ms
function fn(){

}
setInterval(fn,1000) (函数名不需要加括号)

在某些情况下需要关闭

let n=setInterval

clearInterval(n)


JS-API-1
https://wjcbolg.cn/2023/04/21/JS学习笔记6(API)/
作者
JasonWang
发布于
2023年4月21日
许可协议
BY-JW