webApi第一天

148 阅读6分钟
  1. Web API 基本认知

  2. 获取DOM对象

  3. 设置/修改DOM元素内容

  4. 设置/修改DOM元素属性

  5. 定时器-间歇函数

Web API 基本认知

作用和分类

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

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

什么是Dom

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

② 白话文:DOM是浏览器提供的一套专门用来操作网页内容的功能

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

DOM树

①将 HTML 文档以树状结构直观的表现出来,我们称之为文档树或 DOM 树

②描述网页内容关系的名词

③作用:文档树直观的体现了标签与标签之间的关系

1649156924837.png

DOM对象

①DOM对象:浏览器根据html标签生成的 JS对象

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

②DOM的核心思想

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

③document 对象

  • 是 DOM 里提供的一个对象

  • 所以它提供的属性和方法都是用来访问和操作网页内容的

    例:document.write()

  • 网页所有内容都在document里面

获取DOM元素

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

1、选择匹配的第一个元素

Ⅰ、语法:

document.querySelector('css选择器')

	document.querySelector('#nav')//id选择器
     document.querySelector('p')//标签选择器
     document.querySelector('.box')//类名选择器

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

Ⅲ、返回值:

  • CSS选择器匹配的第一个元素,一个 HTMLElement对象。
  • 如果没有匹配到,则返回null。

2、选择匹配的多个元素

①、语法:

document.querySelectorAll('css选择器')

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

③、返回值:CSS选择器匹配的 NodeList 对象集合

例如:

//可以获取多个,也是支持任意的选择器 , 返回值一定是数组 哪怕没有这个元素 空数组
<script>
        //获取所有的li标签   返回一个数组
        let lis = document.querySelectorAll('li');
        //数组和循环搭配
        for (let index = 0; index < lis.length; index++) {
            //lis[index]   dom元素
            lis[index].innerText = `这是li标签`+ index;        
        }
    </script>

④得到的是一个伪数组

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

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

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

3、其他获取DOM元素方法(了解:少用)

<script>
        //根据id获取 一个dom
        let nav = document.getElementById('nav');
        //根据标签名称获取一组 dom元素
        let ps = document.getElementsByName('p');
        //根据类名获取一组一组元素
        let divs = document.getElementsByClassName('box');
    </script>

设置/修改DOM元素内容

1、document.write() //功能弱,以后少用

  • 只能将文本内容追加到 前面的位置
  • 文本中包含的标签会被解析
document.write()

2、对象.innerText 属性

  • 将文本内容添加/更新到任意标签位置
  • 文本中包含的标签不会被解析
document.querySelector('li:nth-child(2)').innerText = '<button>随便修改</button>';//只修改文本

3、对象.innerHTML 属性

  • 将文本内容添加/更新到任意标签位置
  • 文本中包含的标签会被解析
document.querySelector('li:nth-child(3)').innerHTML = '<button>随便修改</button>';//标签也生效
document.innerHTML=`<a>链接</a>`//还可以设置设置标签

设置/修改DOM元素属性

1、设置修改元素常用属性

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

例:

<body>
    <a href="http://www.baidu.com">跳转到</a>
    <img src="./images/1.jpg" title="有惊喜" alt="" />
    <p id="nav"></p>
    <input type="text" />
    <button type="button"></button>
    <h1 class="dfdf"></h1>
    <script>
      /* 
       a 标签身上的  href 图片 src alt  id type class 属性 
        1 获取标签对应的dom元素
        2 dom.属性名=属性值 
       */
      // let aDom = document.querySelector('a');
      // 修改a标签的属性
      // aDom.href = 'https://www.processon.com/mindmap/623c471107912906f5184873';

      let imgDom=document.querySelector("img");
      // 修改图片的src
      imgDom.src="./images/2.jpg";

      // 动态修改 title属性
      imgDom.title="你妈妈叫你回去吃饭";
    </script>
  </body>

2、设置/修改元素样式属性

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

  • 比如通过 轮播图小圆点自动更换颜色样式
  • 点击按钮可以滚动图片,这是移动的图片的位置 left 等等

Ⅱ、学习路径:

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

①、通过 style 属性操作CSS

对象.style.样式属性 = 值

例:

<body>
    <div>肚肚</div>
    <script>
        let divDom = document.querySelector('div')
        divDom.style.fontSize = '50px'
        divDom.style.color = 'pink'
        divDom.style.width = '200px'
        divDom.style.height = '200px'
        divDom.style.background = 'green'
    </script>
</body>

注意:

  • 修改样式通过style属性引出
  • 如果属性有-连接符,需要转换为小驼峰命名法
  • 赋值的时候,需要的时候不要忘记加css单位

②、操作类名(className) 操作CSS

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

  • 直接使用 className 赋值会覆盖以前的类名
  • 可以同时修改多个样式
// active 是一个css类名
元素.className = 'active'

例:

<style>
        .box{
            width: 200px;
            height: 200px;
            background-color: #bfa;
            margin: 100px auto;
        }
        .box1{
            height: 200px;
            font-size: 40px;
        }
    </style>
<body>
    <div></div>
    <script>
        let div =document.querySelector('div')
        div.className = 'box'
    </script>
</body>

注意

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

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

③通过 classList 操作类控制CSS

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

//追加一个类
元素.classList.add('类名')
//删除一个类
元素.classList.remove('类名')
//切换一个类
元素.classList.toggle('类名')
<style>
        .d1{
            background-color: #faa;
        }
        .d2{
            height: 200px;
        }
        .d3{
            width: 400px;
        }
        .d4{
            border-radius: 50%;
        }
    </style>
</head>
<body>
    <div></div>
    <script>
        let div = document.querySelector('div');
        //添加一个class
        div.classList.add('d2');
        div.classList.add('d3');
        div.classList.add('d4');
        //多个添加简写
        //div.classList.add('d2', 'd3', 'd4')

        //单独指定移除某个类
        // div.classList.remove('d2', 'd3');

        //切换  如果原来有,那就是删除   如果没有,就是添加
        // div.classList.toggle('d4')
    </script>
</body>

3、设置/修改表单元素属性

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

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

  • 获取: DOM对象.属性名
  • 设置: DOM对象.属性名 = 新值
表单.value = '用户名'
表单.type = 'password'

①input dom元素

value 获取文本的内容

<body>
<input type="text" class="username" />
</body>
<script>
// 获取一下表单 dom元素
let username = document.querySelector('.username');
// 设置文本内容
username.innerText = '我的用户名';
// 设置输入框的文本内容
username.value = '我的用户名';
</script>

②复选框 或者单选框

checked 设置选中状态

<body>
	//是否同意协定
    <input type="checkbox" class="isarg" checked />
</body>
<script>
	  // 复选框
      let isarg = document.querySelector('.isarg');
	  // 设置勾选上
      isarg.checked = true;
        // 不勾选
      isarg.checked = false;
</script>

③按钮 button

disabled 设置启用状态

<body>
	<button class="code" disabled>发送验证码</button>
</body>
<script>
	   // 设置按钮 可以启用 可以点击
        // disabled 禁用
        code.disabled = true;// 禁用
        code.disabled = false; // 启用
</script>

④下拉列表 select

selected 设置option 选中

<body>
	<select class="sel">
      <option>去泰国</option>
      <option>去非洲</option>
      <option>去印度</option>
      <option>去啊富汗</option>
    </select>
</body>
<script>
	  // select 选中
        let option = document.querySelector('option:nth-child(4)');
        // option.select = true; // 错误的单词 少-ed
        option.selected = true; // 正确的单词
</script>

⑤文本域标签

value 有区别 innerHTML

  • 设置 textarea 里面文本的内容的时候 , 可以选择 在标签内写文本即可

  • 想要获取内容:

    .value 原样获取内容

    .innerHTML 获取的内容如果包含html 会转移

<body>
	<textarea>你好</textarea>
</body>
<script>
	  //  获取 文本域标签
      // 属于表单元素 又是双标签
      let textarea = document.querySelector('textarea');

      // 在html想要设置  文本域的内容 直接在标签内写即可
      // <textarea>  你好 </textarea>

      // 获取文本域中的值
      console.log(textarea.value); // 可以获取到 <h1>你好</h1>
      console.log(textarea.innerText); // 获取不到  
      console.log(textarea.innerHTML); // 可以获取到     &lt;h1&gt;你好&lt;/h1&gt;

	  // 通过js的方式来设置内容(三种都可以)
      // textarea.value=`<h1>标题</h1>`;  //  可以设置
      // textarea.innerText=`<h1>标题</h1>`; //  可以设置
      // textarea.innerHTML=`<h1>标题</h1>`;  //  可以设置
</script>

⑥表单属性的总结

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

  • 设置 按钮的禁用

    button.disabled=true 禁用

    button.disabled=false 启用

  • 设置单选框或者复选框 radio.checked=true 选中 checkbox.checked=false 取消选中

  • 设置下拉列表 select option.selected=true 选中

  • 文本域标签 有点点特殊 ! 属于表单元素 又是双标签

定时器

1、定时器函数介绍

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

2、定时器函数基本使用

①开启定时器

  • 作用:每隔一段时间调用这个函数
  • 间隔时间单位是毫秒

注意:

  • 函数名字不需要加括号
  • 定时器返回的是一个id数字
setInterval(函数, 间隔时间);
 <script>
        //函数 负责定时执行的业务
        function repeat(){
            console.log('前端程序员,头发多');
        }

        //每隔1秒执行一次函数  单位为毫秒 1000毫秒 = 1秒
        setInterval(repeat, 1000);

        //其他模样的写法        setInterval(匿名函数, 1000)
        setInterval(function(){
            console.log('头发没有啦')
        },1000)
    </script>

②.关闭定时器

一般不会刚创建就停止,而是满足一定条件再停止

注意:

  • 函数名字不需要加括号
  • 定时器返回的是一个id数字
let 变量名 = setInterval(函数, 间隔时间)
clearInterval(变量名)
 <script>
      // 追女孩子  追30次 不行 我就撤退!!
      let index = 0;
      // 创建定时器的同时 返回了定时器id
      let timeId = setInterval(function () {
        index++;
        console.log('开始追了', index);
        // 判断是否满足条件了
        if (index === 30) {
          // 放弃 没有缘分
          clearInterval(timeId);
        }
      }, 100);
    </script>