WebAPI-day01笔记

138 阅读6分钟

Web API 基本认知

作用和分类:

作用: 就是使用 JS 去操作 html 和浏览器 分类:DOM (文档对象模型)、BOM(浏览器对象模型)

1649402973474

什么是DOM:

DOM:文档对象模型:一套操作网页元素的方法 ,开发网页内容特效和实现用户交互

DOM树:

DOM树是什么 将 HTML 文档以树状结构直观的表现出来,我们称之为文档树或 DOM 树 描述网页内容关系的名词 作用:文档树直观的体现了标签与标签之间的关系1649403164370

DOM对象:

DOM对象: 浏览器会根据HTML标签生成对应的JS对象

  • 所有的标签属性都可以在这个对象上面找到
  • 修改这个对象的属性会自动映射到标签身上

DOM的核心思想:

  • 把网页内容当做对象来处理

DOM中常见的概念:

  • 文档 document:一个网页可以称为文档

  • 节点 node:网页中的所有内容都是节点(标签、文本、注释等)

  • 元素 element:网页中的标签(标签节点)

获取DOM对象

在DOM中,如果需要操作一个元素,首先需要先获取到对应的DOM对象

通过css选择器获取DOM对象(重点)

获取单个元素

代码:document.querySelector('css选择器');

返回值: 一个元素。如果有多个,之后返回第一个,如果没有返回null

代码示例 01-通过css选择器获取dom对象

<body>
    <div class="box">我是一个div标签</div>
    <input type="text">
    <script>
        //DOM对象对象是浏览器自动帮我们创建好的
        //1.获取单个对象
        //document.querySelector('css选择器')
       let box= document.querySelector('.box')
        console.dir(box)

        //注意点: 1如果符合条件的有多个对象,此时只获取第一个
        // 如果没有符合条件的对象,此时获取的是null
        
        //查看对象类型
        console.log(typeof box)



        //获取input标签的dom元素
        let input =document.querySelector('input')
        console.dir(input);
    </script>
</body>

小结:

  1. 想要获取页面的标签 可以通过document.querySelector(选择器)

  2. document.querySelector只能获取第一个满足条件的标签‘

  3. 如果选择器找不到元素querySelector只会返回null

  4. 如果我们想要输出打印dom元素

    不再使用console.log

    改为 使用 console.dir

可参看文档:developer.mozilla.org/zh-CN/docs/…

获取多个元素

代码:document.querySelectorAll('css选择器')

返回值: 伪数组。无论找到几个元素,返回值都是伪数组

// 参数:css选择器
// 返回值:伪数组。无论找到几个元素,返回值都是伪数组
document.querySelectorAll('css选择器')

伪数组的特点:

  • 有长度,有索引
  • 没有数组的相关方法,比如:arr.push()......
<body>
    <div>我是div1</div>
    <div>我是div2</div>
    <div>我是div3</div>
    <div>我是div4</div>
    <div>我是div5</div>
    <script>
        //获取多个对象 document.querySelectorAll('css选择器')
       let divs= document.querySelectorAll('div')
       console.log(divs)
    //    注意点:无论符合条件的对象是有还是无 获取的都是一个伪数组

     //单选选中第斯个对象
      //  console.log(divs[3])

    //每一项
    for (let i= 0; i< divs.length; i++) {
       console.log(divs[i])
        
       //设置文本
      divs[i].innerText='爸爸我叫div'+i ;
    }
    //设置文本标签
    
   
    //伪数组的特点:
    //1.有下标,也有长度 可以被遍历
    //2.伪数组无法使用之前数组中的相关方法:arr.push( )
    </script>
</body>

注意:querySelector( ) 方法获取到的元素能直接操作修改吗? 可以

​ querySelectorAll() 方法获取到的元素能直接修改吗? ​ 不可以, 只能通过遍历的方式。依次给里面的元素做修改

**document.querySelectorAll('css选择器')得到的是一个伪数组:**

有长度有索引号的数组 但是没有 pop( ) push( ) 等数组方法

想要得到里面的每一个对象,则需要遍历(如 for)的方式获得。

哪怕只有一个元素,通过querySelectAll() 获取过来的也是一个伪数组,里面只有一个元素而已

设置/修改DOM元素内容

目标:能够修改元素的文本更换内容

如果想要修改标签元素的里面的内容,则可以使用如下几种方式:

  1. 对象.innerText 属性
  2. 对象.innerHTML 属性
  3. document.write() 方法

1.元素.innerText 属性 将文本内容添加/更新到任意标签位置 文本中包含的标签不会被解析

代码示例 02-动态修改dom的文本内容

<body>
    <h1>今天想邀请哪个同学去玩</h1>
    <h2 class="name"></h2>
    <script>
        //1.先获取h2标签对应的dom元素
        //2.使用代码修改文本内容
        //dom元素.innerText='修改属性的内容'
        let userName=prompt('请输入你想要求同学的姓名:');

        let name=document.querySelector('.name');

        name.innerText=userName;
    </script>
</body>

综合案例 1649409175899

<title>案例</title>
    <style>
        div{
            border: 1px solid #000;
            width: 50px;
            height: 30px;
        }
    </style>
</head>
<body>
    抽中的选手是:<div></div>
    <script>
        let aarr=['胡歌','靳东','彭于晏','欧豪','朱亚文',]
        let num =Math.round(Math.random()*4)
        console.log(aarr[num]);

        //获取h3标签的dom元素
        let div=document.querySelector('div')
        div.innerText=aarr[num]
    </script>
</body>

querySelectorAll不管你的选择器是否写对与否,返回值都是数组

querySelector

  1. 能找到相对应的 返回dom元素/dom对象
  2. 找不到 返回null

2.元素.innerHTML 属性

元素.innerHTML 属性 将文本内容添加/更新到任意标签位置 文本中包含的标签会被解析

相同点: 通过innerTextinnerHTML都可以操作标签的内容。

区别:

  • innerText属性:

    • 只能获取文本——》如果有标签会忽略

    • 只能设置文本——》当设置的是标签时,标签不能被解析,标签不能生效

  • innerHTML属性:

    • 可以获取文本和标签
    • 可以设置文本和标签——》当设置的是标签,标签可以被解析,标签可以生效

代码效果如下:

<body>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
    </ul>
    <script>
        let li=document.querySelector('li:nth-child(3)')
        li.innerText='<button>叫爸爸</button>'

        let lis=document.querySelector('li:nth-child(5)')
        lis.innerHTML='<button>叫爸爸</button>'

    </script>
</body>

1649413522694

设置/修改DOM元素属性

设置/修改元素常用属性 设置/修改元素样式属性 设置/修改 表单元素 属性

设置/修改元素常用属性

  • 还可以通过 JS 设置/修改标签元素属性,比如通过 src更换 图片
  • 最常见的属性比如: href、title、src 等
  • 语法:1649415658519

1649415669198

<body>
    <a href="https://www.baidu.com/">跳转到我的个人微博</a>
     <img src="./images/1.jpg" alt="这是一张图片">

    <script>
        //1.先获取a标签的dom元素
        let aDom=document.querySelector('a')
        //2.对其网址进行修改
        aDom.href='https://weibo.com/7461987634'

        //修改图片的src属性
        let imgDom=document.querySelector('img')
        imgDom.src='/images/2.jpg'

        //动态修改title属性
        imgDom.title='这是一张美美的照片'
    </script>
</body>

案例:1649417081628

<body>
    <img src="" alt="">
    <script>
        let aarr=[
        './imges/新建文件夹IMG_0131.JPG',
        './imges/新建文件夹IMG_0633.JPG',
        './imges/新建文件夹IMG_1208.JPG',
        ' ./imges/新建文件夹IMG_1487.JPG',
        './imges/新建文件夹IMG_1796.JPG',
        ' ./imges/新建文件夹IMG_1798.JPG',
        './imges/新建文件夹IMG_2677.JPG',]
        //利用随机数生成随机图片
        let picture=Math.round(Math.random()*6)
       

        //获取图片的src属性
        let img=document.querySelector('img')
        img.src=aarr[picture]
    </script>
</body>

设置/修改元素样式属性

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

  • 通过 style 属性操作CSS
  • 操作类名(className) 操作CSS
  • 通过 classList 操作类控制CSS

1.通过 style 属性操作CSS

语法:1649417437999

1649417599240

代码

<body>
    <div>
        我是一个普通的元素
    </div>
    <script>
        //动态修改div的样式属性
        //先获取div的dom元素
        let div=document.querySelector('div')
        //开始修改
        div.style.color='red'
        div.style.fontWeight=700
        div.style.fontSize='100px'
    </script>
</body>

1649418006142

操作类名(className) 操作CSS

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

语法:1649419816242

 <style>
        .box{
            width: 100px;
            height: 100px;
            background-color:green;
            margin: 100px auto;
        }
    </style>
</head>
<body>
    <div></div>
    <script>
        //通过js的方式来动态添加上这个class
        //先获取div的dom元素
        let div=document.querySelector('div')
        //通过className 来设置类名即可
        div.className='box'
    </script>
</body>

1649420127837

小总结:

  1. 使用 className 有什么好处? 可以同时修改多个样式

  2. 使用 className 有什么注意事项? 直接使用 className 赋值会覆盖以前的类名

通过 classList 操作类控制CSS

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

语法:1649420426172

代码

 <style>
        .d1{
            background-color:red;
            width: 100px;
            height: 100px;
        }
        .d2{
            background-color:aqua;
            width: 30px;
            height: 30px;
        }
        .d3{
            background-color:tomato;
            width:65px ;
            height: 65px;
        }
    </style>
</head>
<body>
    <div class="d1"></div>
    <script>
        //先获取div标签的元素dom
    let div=document.querySelector('div')

    //给div 添加一个类
    div.classList.add('d2')

    //classList.remove 移除一个类
    div.classList.remove('d2')

    //切换一个类   如果本来有 那我就移除 如果本来 没有 那就添加
    div.classList.toggle('d4')
    </script>
</body>

设置/修改 表单元素 属性

设置/修改 表单元素 属性

表单很多情况,也需要修改属性,比如点击眼睛,可以看到密码,本质是把表单类型转换为文本框 正常的有属性有取值的 跟其他的标签属性没有任何区别 获取: DOM对象.属性名 设置: DOM对象.属性名 = 新值

1649434441987

1649437086917

****表单属性的总结

设置普通的输入框 input.value='表单的值'

  1. 设置 按钮的禁用
    • button.disabled=true 禁用
    • button.disabled=fales 启用
  2. 设置单选框或者复选框
    • checkbox.checked=false 取消选中
  3. 设置下拉列表 select
    • option.selected=true 选中
不一样的文本域标签
<body>
    <textarea><h1></h1></textarea>
    <script>
        //获取文本域标签的dom元素   //属于表单元素  且是双标签
        let textarea=document.querySelector('textarea')

        //获取textarea里面的文本内容
        let a =textarea.value        //ok  <h1>你</h1>
        let b=textarea.innerText     //no
        let c=textarea.innerHTML     //ok  &lt;h1&gt;你&lt;/h1&gt;
       console.log(a,b,c);
        //.value    原样获取里面的内容
        //.innerHTML 获取的如果包括html 回转移


       //通过js方式设置文本域内容
    //    textarea.value='好吗'    ok
    //    textarea.innerHTML=123   ok
    //    textarea.innerText='abc' ok
    </script>
</body>

定时器-间歇函数

能够说出定时器函数在开发中的使用场景

网页中经常会需要一种功能:每隔一段时间需要自动执行一段代码,不需要我们手动去触发 例如:网页中的倒计时 要实现这种需求,需要定时器函数 定时器函数有两种,今天我先讲间歇函数

1649422511179

能够使用定时器函数重复执行代码

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

  1. 开启定时器

1649422587323

作用:每隔一段时间调用这个函数 就是每一段时间就重复这个操作

间隔时间单位是毫秒

例如:

1649422697545

代码:

<script>
        // function repeat(){
        //     console.log('前端程序员,就是头发多');
        // }
        //每隔一秒就调用repeat函数
        // setInterval(repeat,1000)


        //第二种写法
        // setInterval(匿名函数,1000)
        setInterval(function(){
            console.log('前程序猿头发就是多');
        },1000)
    </script>

清除定时器

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

1649423802805

注意: 函数名字不需要加括号 定时器返回的是一个id数字

清除定时器一般都是根据某个条件来清除

 let index=0;
       let timeId =setInterval(function(){
           index++;
        console.log('我肚子好饿呀');
        
        //来个条件判断
        if(index===30){

            {clearInterval(timeId);}
        }
        },1000)    //1000毫秒等于1秒

** 你生活的起点并不是那么重要,重要的是最后你能到达哪里**

思维导图:www.processon.com/mindmap/624…