Web APIs DOM获取元素

ppgo8 于 2023-04-02 发布

DOM获取元素

变量声明const

变量声明:var、let、const应该用哪个?

排除var,已经被淘汰了。

建议优先用const,尽量用const,原因是:

如果还在纠结,建议:

举例: image-20230403095026544

image-20230403095112061

基本数据类型只要后续在发生赋值操作,更改了值,就不可以用const。

image-20230403095202433

引用类型更改数据,改变的是堆里的内容,栈内存储的内存地址不发生改变。

const arr = ['pink','red']
        arr.push('blue')          // 可以添加,不报错。没改变原来的值
        console.log(arr)

        arr = [1,2,4] // 会报错,开辟了新数组
// 第二种方法会报错,因为开辟了一个新的数组。而不是在原来数组的基础上增删改查

image-20230403100108694


总结

image-20230403100236999

Web API基本认知

作用和分类

作用:就是用JS去操作html和浏览器

分类:DOM(文档对象模型)、BOM(浏览器对象模型)

image-20230403100500470

什么是DOM

DOM(Document——文档对象模型)是用来呈现以及与任意HTML或XML文档交互的API。

白话文:DOM是浏览器提供的一套用来操作网页内容的功能,让网页元素发生变化

DOM作用:开发网页内容特效和实现用户交互

DOM树

DOM树是什么

DOM对象(重要)

image-20230403103851926

DOM树的内容在html中叫标签,在JS里面叫对象。

DOM核心思想:把网页内容当做对象来处理

document对象

获取DOM对象

简单理解:把标签抓过来。如果想修改就需要先获取

目的:能够查找/获取DOM对象

根据CSS选择器来获取DOM元素(重点)

选择匹配的第一个元素

// 语法
const 变量名 = document.querySelector('css选择器')  //页面所有内容的都在document中,所以要先写document
// 注意
// css选择器的内容,在css里面怎么写,在上面就怎么写
// 一定要添加引号

返回值:上述CSS选择器匹配第一个元素,一个HTMLElement对象。

如果没匹配到,返回空

console.log(返回对象变量名) // 打印的是元素的网页内容,html
console.dir(返回对象变量名) // 打印的是js对象

选择匹配的全部元素

document.querySelectorAll('css选择器')

参数:包含一个或多个有效的CSS选择器 字符串

返回值:CSS选择器匹配的NodeList 对象集合(数组形式,伪数组)

image-20230403111246105

得到是一个伪数组

想要改变样式,需要遍历for循环方式修改每个的内容。

哪怕元素内容只有一个,返回的只有一个,得到的也是伪数组形式。


总结

image-20230403111441456

其他获取DOM元素的方法(了解)

image-20230403112302870

注意,上面的获取里面不写id选择器#号、类选择器的.符号。

不如上面方便,上面的一个查询里面可以写很多种类型。

操作元素内容(文本内容)

拿过来DOM对象之后,就需要进行操作。修改元素的文本更换内容

image-20230403112708963

innerText

innerHTML

年会抽奖案例

image-20230403113711477

操作元素属性(常用属性、样式、表单)

操作标签常用属性

// 语法
对象.属性 = 
// 示例:刷新修改图片
<img src="./images/1.webp" alt="">
<script>
    // 随机取n-m的数字
    function getRandom(n, m) {
        return Math.floor(Math.random() * (m - n + 1) + n)
    }
    // 1.获取图片对象
    const img = document.querySelector('img')
    // 2.随机得到序号
    const random = getRandom(1, 6)
    // 3.更换路径
    img.src = `./images/${random}.webp`
    img.title = 'abc'
</script>

操作元素样式属性(重要)

通过JS设置/修改标签元素的样式属性

学习路径:

  1. 通过style属性操作CSS

    缺点:每个属性都要单独书写一行,太长,繁琐

  2. 操作类名(className)操作CSS

    适用于修改较多的属性,比较方便。

    缺点:会覆盖掉原先的类名,所以使用时还要先检查标签是有类名

  3. 通过classList操作类控制CSS

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

通过style属性操作CSS

/*CSS中style属性修改样式的方法*/
<style>
选择器 {
    属性:属性值;
    ...
    属性:属性值;
}
</style>
// JS中语法
对象.style.属性 = ''  // 一般都需要加''
// 注意:在CSS style中属性若是用-符号链接,JS中则去掉-符号采用小驼峰写法

总结

image-20230404094927299

// 示例
<!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>
        body {
            background: url(./images/desktop_1.jpg) no-repeat top center;
        }
    </style>
</head>

<body>
    <script>
        // console.log(document.body)
        // console.dir(document.body)
        // 可以直接用document.body而无需获取

        // 随机取n-m的数字
        function getRandom(n, m) {
            return Math.floor(Math.random() * (m - n + 1) + n)
        }
        const random = getRandom(1,10)
        // 不要忘记写style 要书写style
        document.body.style.background = 		`url(./images/desktop_${random}.jpg) no-repeat top center `
    </script>
</body>
</html>

操作类名(className)修改CSS


总结

  1. 使用className有什么好处?

    可以同时修改多个样式。

  2. 使用className有什么注意事项?

    直接使用className复制会覆盖以前的类名

通过classList操作类控制CSS


总结

  1. 使用className和classList的区别?
    • className修改大量样式的更方便
    • classList修改不多样式更方便
    • classList是追加和删除不影响以前的类名

随机轮播图案例

image-20230407110105673


总结

image-20230407113142626

  1. 常用属性直接在标签后面写.属性

  2. style操作样式属性JS后先写.style.样式属性 = xxx

  3. className操作样式属性:JS对象.calssName = xxx 类名
  4. classList操作样式属性:JS对象.classList.方法名(‘’)

操作表单元素属性

注:表单不通过innerHTML获得文本内容,而是通过value

表单对象.value                 // 得到表单值
表单对象.value = '新的属性值'    // 修改表单值
表单对象.type = 'password'      // 新的类型:password

H5自定义属性

标准属性:标签天生自带的属性,可以直接使用语法操作,如disabled,checked,selected

自定义属性:

image-20230407195932441

定时器-间歇函数

下面这个模块每秒变化一次:

image-20230407200703565

定时器函数可以开启和关闭定时器。

开启定时器setInterval

setInterval(函数间隔时间)
// 一般里面使用匿名函数

作用:每间隔多少时间,调用一次这个函数

间隔时间单位是毫秒,1s=1000ms

image-20230407202143967

关闭定时器clearInterval

在某些情况下,定时器需要结束。比如鼠标点击

每个定时器返回的数字都是独一无二的,这 样页面的各个定时器不会冲突。

image-20230407202548539

小结

image-20230407202839468

综合案例

image-20230407204929423

轮播图内容每隔1s自动切换。