js-webApi笔记1

news2024/12/25 9:05:53

目录

前言

Web API的概念

什么是DOM

DOM树

1、查找元素

2、其他查找元素方法

 3、操作元素

 4、操作元素属性

5、 操作元素样式   style

6、操作自定义属性

7、 操作表单元素属性

8、事件

9、事件绑定

 10、常用鼠标事件

 11、定时器

 12、定时器案例


前言

Web API的概念

Web API 是浏览器提供的一套操作浏览器功能和页面元素的 API ( BOM 和 DOM )。

什么是DOM

文档对象模型(Document Object Model,简称DOM),是 W3C 组织推荐的处理可扩展标记语言(html或者xhtml)的标准编程接口。

W3C 已经定义了一系列的 DOM 接口,通过这些 DOM 接口可以改变网页的内容、结构和样式。

DOM是W3C组织制定的一套处理 html和xml文档的规范,所有的浏览器都遵循了这套标准。

DOM树

DOM树 又称为文档树模型,把文档映射成树形结构,通过节点对象对其处理,处理的结果可以加入到当前的页面。

  • 文档:一个页面就是一个文档,DOM中使用document表示

  • 节点:网页中的所有内容,在文档树中都是节点(标签、属性、文本、注释等),使用node表示

  • 标签节点:网页中的所有标签,通常称为元素节点,又简称为“元素”,使用element表示

1、查找元素

document.querySelector( 'css选择器' )
    document.querySelectorAll( 'css选择器' )

document.querySelector( 'css选择器' )
 返回满足条件的第一个元素(dom元素对象),找不到返回null
 

    <div>第一个div</div>
    <div class="box">我是一个盒子</div>
    <ul>
        <li>第一个li</li>
        <li>第2个li</li>
        <li>第3个li</li>
        <li>第4个li</li>
    </ul>
    <p>我是P</p>

	 const div=document.querySelector('div')
 	 console.log(typeof div)//object
    	  console.dir(div)//展开
       	 const box=document.querySelector('.box')
      	 console.log(box)
     	const firstLi=document.querySelector('ul li')
       	console.log(firstLi)

document.querySelectorAll( 'css选择器' )
    返回满足条件的所有元素
    返回的结果是一个伪数组(有length,有序号),但是不能调用数组的方法,如push,pop...
    对象{0:第一个div对象,1:第二个div,length: 2}

   <ul>
       		 <li>第一个li</li>
        		<li>第2个li</li>
        		<li>第3个li</li>
       		 <li>第4个li</li>
   	 </ul>
       	 const lis=document.querySelectorAll('li')
       	 console.log(lis)

 不能调用数组的方法,会报错

  // lis.push(100)//报错

     获取具体的元素,用document.querySelectorAll( 'css选择器' ) 获取的元素,即使只有一个,也必须按数组下标的方式来获取具体的元素

 //获取具体的元素
       	 console.log(lis[0])
        	console.log(lis[2])

       	 const p=document.querySelectorAll('p')
       	 console.log(p)
       	 console.log(p[0])

2、其他查找元素方法

    1.根据id值查找
    document.getElementById( 'id的值' )

    2.根据标签名查找
    document. getElementsByTagName( )

    3.根据class查找
    document.getElementsByClassName( )

    4.根据name查找
    document.getElementsByName( )

 <body>
    <div class="box">这是第一个div</div>
    <ol>
      <li>111</li>
    </ol>
    <ul>
      <li>北京</li>
      <li id="sh">上海</li>
      <li>广州</li>
    </ul>
    <div class="box">这是第二个div</div>
    <p class="box">lalala</p>
    <input type="text" name="username" />
    <input type="text" name="password" />
    <script>
      // 1 document.getElementById('id的值')
      const ele = document.getElementById('sh')
      console.log(ele)
      // 2 根据标签名查找 document.getElementsByTagName()
      // 获取所有li
      const list = document.getElementsByTagName('li')
      console.log(list) // HTML元素集合
      for (let i = 0; i < list.length; i++) {
        console.log(list[i])
      }
      //  3 根据class查找
      const list2 = document.getElementsByClassName('box')
      console.log(list2)
      //  4  根据name查找
      const list3 = document.getElementsByName('username')
      console.log(list3[0])
    </script>
  </body>

 3、操作元素

操作元素,首先要获取元素,然后用 元素名.innerText 或 元素名.innerHTML去操作元素的内容

可以进行的操作有修改文本内容,删除文本内容

其中:      

innerText    可以获取元素内容,可以改变元素内容,无法识别标签,无法识别换行

innerHTML    可以获取元素内容,可以改变元素内容,可以识别标签,可以识别换行

<body>
    <div>学好js,高薪在望</div>
    <ul>
      <li>HTML5</li>
      <li>CSS3</li>
      <li>JS</li>
    </ul>

    <script>
      // 1  获取元素
      const oDiv = document.querySelector('div')
      // 2 通过元素.innerText  获取文本内容
      console.dir(oDiv.innerText)
      // 3  修改文本内容
      //oDiv.innerText = '学好js,月薪过万'
      //  4 删除
      //oDiv.innerText = ''
      //oDiv.innerText += '!!!'

      // 元素.innerHTML
      const ul = document.querySelector('ul')
      console.log(ul.innerText) // 支持文本
      console.log(ul.innerHTML) // 支持标签
      oDiv.innerHTML = `<p>${oDiv.innerText}</p>`
    </script>
  </body>

 4、操作元素属性

操作元素属性:

修改/设置元素属性

   <img src="./1.webp22" alt="我是一张图片 " width="400" height="300" />
    <script src="./tool.js"></script>
    <script>
      // 1 获取元素
      const oImg = document.querySelector('img')
      console.dir(oImg)
      // 2 改图片src width  height
      //  oImg.src = './2.webp'
      // oImg.width = 300
      // oImg.height = 200

      // const arr = ['./1.webp', './2.webp', './3.webp']
      // const index = getRndNum(0, arr.length - 1)
      // oImg.src = arr[index]
    </script>

5、 操作元素样式   style

通过style操作样式:

使用style修改样式:   元素.style.样式属性=属性值

通过style修改的样式是添加在行内样式里面(不建议使用,因为权重比较高)

属性要写成驼峰命名(单词连接需要首字母大写)

通过className设置元素样式(其实就是给元素添加class类名) 元素.className='类名'

如果元素本身有class类名时又不想丢失 就需要在设置类名时把原本的类名也写上 div.className='boxs box'

   <style>
        .box{
            width: 300px;
            height: 300px;
            background-color: darkcyan;
        }
        .active{
            width: 500px;
            height: 500px;
            background-color: lightskyblue;
        }
    </style>
</head>

<body>
    <div class="demo box">box</div>
    <script>
        //获取元素
        const box = document.querySelector('div')
        //设置行内样式
        // box.style.width='300px'
        // box.style.height='300px'
        // box.style.backgroundColor='pink'

        //设置类样式
        // box.className='box'//添加会覆盖原有的类
        box.className +=' box2'//拼接类,前加一个空格,保留原有的类

        //通过classList操作类

        // box.classList.add('box')//在原有的基础上加一个box类
        // box.classList.remove('demo')  //删除demo类
        // box.classList.toggle('active')  //切换
    </script>

6、操作自定义属性

    <div id="box" class="box" a="1" data-num="10" data-msg="hello"></div>

获取元素

   //  1 获取元素
      const box = document.querySelector('.box')
      console.dir(box.className) //  原生属性 元素.原生属性名
      console.log(box.id)

元素.getAttribute('属性名') 获取元素属性名

   // 元素.getAttribute('属性名') 获取元素属性名
      console.dir(box.getAttribute('a'))
      console.dir(box.getAttribute('id'))

元素.setAttribute('属性名',值) 设置元素属性

     //  元素.setAttribute('属性名',值) 设置元素属性
      box.setAttribute('a', 10)

针对data-开头的自定义属性名

  // 针对data-开头的自定义属性名
      console.log(box.getAttribute('data-num'))
      box.setAttribute('data-num', 'abc')
      console.log(box.dataset.num) // {num: "10", msg: 'hello'}
      console.log(box.dataset.msg)

添加一个属性data-info

  box.dataset.info = 123

7、 操作表单元素属性

   <input type="text" name="username" id="username" value="123" />
    <button>按钮</button>
    <input type="checkbox" />唱歌

获取文本框

 const txt = document.querySelector('input[name="username"]')
      console.log(txt.value)
      // txt.value = '456' // 修改
      txt.value = '' // 清空

      txt.type = 'password'

禁用按钮

 const btn = document.querySelector('button')
      btn.disabled = true // true 禁用

设置复选框状态

  const cbox = document.querySelector('input[type="checkbox"]')
      // cbox.checked = 'true' // 有隐式转换 字符串'true'->true 不推荐这么使用
      cbox.checked = true

8、事件

js  dom事件单击
        用户对dom元素(比如按钮,div,span...)进行某种操作行为(单击、双击、鼠标移入,...键盘按下),页面会做出响应。

    事件三要素:1.事件源(谁身上发生了)
                         2.事件名称(具体行为)
                         3.事件处理逻辑(当事件行为发生后,导致什么结果)

        js处理事件      事件源.事件名称·=·function() { }

<button>按钮</button>
    <script src="./tool.js"></script>
    <img src="./1.webp" alt="我是一张图片 " width="400" height="300" />


    1.获取事件源

  const btn = document.querySelector('button')
      const arr = ['./1.webp', './2.webp', './3.webp']
      const oImg = document.querySelector('img')


    2.绑定事件(注册事件)

 // 2 绑定事件(注册事件)
      btn.onclick = function () {
        // alert('被点击了!!!')
        // 随机产生一张图片
        const index = getRndNum(0, arr.length - 1)
        oImg.src = arr[index]
      }

9、事件绑定

  <button>唐伯虎</button>

1 获取事件源

 const btn = document.querySelector('button')

2 绑定事件

 btn.onclick = function () {
        alert('秋香')
      }

DOM   0 级    事件绑定   会覆盖之前同名事件

DOM   2 级    可以对同一事件绑定多次,以后会依次执行


    元素.addEventListener( '事件名称',事件处理程序)
 

  btn.addEventListener('click', function () {
        alert('秋香')
      })


      btn.addEventListener('click', function () {
        alert('秋香123')
      })

 10、常用鼠标事件

     click                鼠标单击
    mouseenter     鼠标移入
    mouseleave     鼠标离开
    dblclick             鼠标双击

  // DOM 0
      // 1 获取事件源
      const btn = document.querySelector('button')
      // 2 绑定事件
      // DOM 2级 可以对同一事件绑定多次,以后会依次执行
      /*
         元素.addEventListener('事件名称', 事件处理程序)
      */
      btn.addEventListener('click', function () {
        alert('秋香')
      })

      // btn.addEventListener('mouseenter', function () {
      //   alert('鼠标移入')
      // })

      // btn.addEventListener('mouseleave', function () {
      //   alert('鼠标移出')
      // })
      
      // 双击
      // btn.addEventListener('dblclick', function () {
      //   console.log('双击')
      // })

 11、定时器

    定时器----间歇函数
    有的 代码逻辑需要隔一段时间执行一次

    setInterval( function ( ) {.    .   .} ,1000)

    开启定时器    setInterval( )
    取消定时器    clearInterval(  )

 // 定时器-间歇函数 // 有的代码逻辑需要隔一段时间执行一次
      // setInterval(function() { ...},1000)

      function repeat() {
        console.log('每隔1s执行一次')
      }
      const timer = setInterval(repeat, 1000)
      const timer2 = setInterval(repeat, 1000)

      console.log(timer, timer2) // 数字

      // 给按钮绑定事件
      document.querySelector('button').addEventListener('click', function () {
        // 取消定时器
        clearInterval(timer)
        clearInterval(timer2)
      })

 12、定时器案例

发送短信倒计时

<!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: 100px;
            height: 100px;
            background-color: skyblue;
        }
    </style>
</head>

<body>
    <input type="text"><button>发送</button>
    <script>
        var btn = document.querySelector('button')
        var num = 3
        btn.onclick = function () {
            // 点击的时候让按钮禁用
            btn.disabled = true
            var timer = setInterval(function () {
                if (num == 0) {
                    // 时间等于0时,清除定时器
                    clearInterval(timer)
                    btn.innerHTML = '发送'
                    btn.disabled = false
                    num = 3
                } else {
                    btn.innerHTML = num + '秒'
                    num--
                }

            }, 1000)
        }
    </script>
</body>

</html>

5秒关闭广告

<!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: 100px;
            height: 100px;
            background-color: gold;
        }
    </style>
</head>

<body>
    <div></div>
    <script>

        //   5秒关闭广告(进入页面后展示倒计时从5秒 4秒 3秒 2秒 1秒 然后自动关闭)
        var div = document.querySelector('div')
        var num = 4
        div.innerHTML = '还剩5秒'
        var timer = setInterval(function () {

            if (num == 0) {
                div.style.display = 'none'
                clearInterval(timer)
            } else {
                div.innerHTML = '还剩' + num + '秒'
                num--
            }

        }, 1000)
    </script>
</body>

</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1221547.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

京东推出数据平台云海 API接口将达700个

1月16日消息&#xff0c;继上周面对企业用户发布京东电商云解决方案后&#xff0c;日前&#xff0c;京东云平台又发布了全新的数据开放平台——“云海”&#xff0c;以开放商家、商品、点击流等相关数据。 在京东主办&#xff0c;思路网协办的京东开放云服务合作伙伴2014峰会&…

leetcode刷题日志-151反转字符串中的单词

给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意&#xff1a;输入字符串 s中可能会存在前导空格、尾随…

加密数字货币:机遇与风险并存

随着区块链技术的发展和普及&#xff0c;加密数字货币逐渐走入人们的视线。作为一种以数字形式存在的资产&#xff0c;加密数字货币具有去中心化、匿名性和安全性高等特点&#xff0c;为人们提供了一种全新的支付方式和投资选择。然而&#xff0c;加密数字货币市场也存在着较高…

实在智能携手中国电信翼支付,全球首款Agent智能体亮相2023数字科技生态大会

11月10日-13日&#xff0c;中国电信与广东省人民政府联合主办的“2023数字科技生态大会”在广州隆重举行。本届大会以“数字科技焕新启航”为主题&#xff0c;邀请众多生态合作伙伴全方位展示数字科技新成果&#xff0c;包括数字新消费、产业数字化、智能电子、人工智能大模型等…

Vite Vue3+Element Plus框架布局

App根组件&#xff1a;框架布局 <template><el-container class"layout-container-demo" style"height: 98vh"><!-- 菜单栏 --><el-aside width"200px"><el-scrollbar><!-- router:是否启用 vue-router 模式。…

springcloud整合nacos实现服务注册

Nacos是一个开源的分布式系统服务和基础设施解决方案&#xff0c;用于实现动态服务发现、配置管理和服务治理。它可以帮助开发人员和运维团队更好地管理微服务架构中的服务实例、配置信息和服务调用。 Nacos提供了服务注册与发现、动态配置管理、服务路由和负载均衡等功能&…

02-3解析BeautifulSoup

一、基本简介 BeautifulSoup简称&#xff1a;bs4什么是BeatifulSoup&#xff1f;  BeautifulSoup&#xff0c;和lxml一样&#xff0c;是一个html的解析器&#xff0c;主要功能也是解析和提取数据优缺点&#xff1f;  缺点&#xff1a;效率没有lxml的效率高  优点&#xff1…

小游戏:贪吃蛇和俄罗斯方块(Java简单版)

贪吃蛇 package z; import java.awt.Color; import java.awt.EventQueue; import java.awt.Font; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.util.ArrayList; import java.util.List; import java.util.Random;import javax.swin…

畅捷通+数环通iPaaS,实现无代码集成上千款应用

01 关于畅捷通 畅捷通信息化服务专家,为用户提供在线财务软件,云进销存管理软件,移动办公软件,帮助小微企业人、财、货、客的管理,全面服务小微企业并提供社交化、个性化、服务化、小量化的生意管理支持。 企业除了畅捷通&#xff0c;还有大大小小其他的系统&#xff0c;面临着…

听GPT 讲Rust源代码--library/core/src(6)

题目来自 A Gentle Introduction To Rust[1] File: rust/library/core/src/num/dec2flt/common.rs 在Rust源代码中&#xff0c;rust/library/core/src/num/dec2flt/common.rs的作用是定义了一些用于十进制到浮点数转化的共享逻辑。以下是对该文件内容的详细介绍&#xff1a; Bi…

Linux磁盘分区快速上手(讲解详细)

一、磁盘分区 在Linux中&#xff0c;磁盘是通过分区来使用的。分区是将一个硬盘划分成几个逻辑部分来使用&#xff0c;在每个分区中可以存储不同的文件系统。因此&#xff0c;在挂载磁盘之前&#xff0c;我们需要先对磁盘进行分区。磁盘分区的过程可以通过命令行工具或图形界面…

国家药品价格查询官网-在线网站查询方法

查询药品上市价格对于个人和机构来说都是非常有必要的&#xff0c;对个人可以很好的验证该药品是否存在虚高的情况&#xff0c;对药企来说可以根据同类药品市场价格指导自产药品的定价&#xff0c;对其它机构来说了解药品价格可以帮助选择价格合理的药品供应商&#xff0c;降低…

自费出国|药学研究人员赴澳大利亚墨尔本大学访学

澳大利亚的创新药物研发在世界上一直处于领先地位&#xff0c;考虑到签证因素&#xff0c;专职药学研究的H老师将访学目标国家定位在澳大利亚。我们为其落实了墨尔本大学的职位&#xff0c;导师的研究课题与H老师的兴趣高度契合&#xff0c;最终顺利签证并如期出国。 H老师背景…

测试人员如何提交一条高质量的bug

测试人员在测试软件过程中&#xff0c;发现bug是必然的&#xff0c;那么发现bug后就要提交bug到缺陷管理系统中&#xff0c;如何提交一条高质量的bug&#xff0c;是每一个测试人员值得深思的问题&#xff0c;如果bug提交的不规范&#xff0c;不准确会导致开发人员理解错误&…

7条软件测试的基本原则

软件测试的原则是指帮助测试团队有效地利用他们的时间和精力来发现测试项目的隐藏bug的指导方针。从实践和研究中总结得出以下 7 条软件测试的基本原则&#xff0c;以便测试人员在软件测试领域广泛应用。 一、测试证明软件存在缺陷-Testing shows presence of defects 测试只能…

在已安装Anaconda环境下配置沐神(李沐老师)动手学深度学习环境

沐神配置环境视频 B站李沐老师动手学深度学习环境配置视频 在windows中配置沐神深度学习环境 前提&#xff1a;安装了Anaconda基本环境&#xff0c;了解Jupyter NoteBook 1.打开 Anaconda Prompt 2.创建虚拟环境 create conda -n d2l-zh python3.8 pip3.激活虚拟环境 con…

菲律宾shopee怎么推广?shopee菲律宾站点什么好卖?——站斧浏览器

菲律宾shopee怎么推广 首先&#xff0c;要想在Shopee上成功推广自己的店铺&#xff0c;关键是提升店铺的曝光率。有多种方式可以增加店铺的曝光率&#xff0c;其中之一是使用Shopee提供的广告服务。 Shopee广告分为首页广告和搜索广告两种形式。商家可以根据自己的需求选择适…

vue项目中设置background: url() 是行内样式不生效,样式表是可以的

[TOC](vue项目中设置background: url() 是行内样式不生效&#xff0c;样式表是可以的) 首先&#xff1a;如果不是项目中普通的一个index.html中是可以的 一、原因 在Vue项目中&#xff0c;行内样式和样式表的编译规则是有所不同的。当你在Vue组件的行内样式中使用相对路径引用图…

介绍一款 SaaS 服务器监控工具: CloudStats

导读CloudStats 是一个简单而强大的服务器监控和网络监控工具。使用 CloudStats&#xff0c;你可以监控来自世界上任何地方的服务器和网络的所有指标。 最棒的是你不需要有任何特殊的技术技能 - CloudStats 很容易安装在任何数据中心的任何服务器上。 CloudStats 允许你使用任…

创作者焦点:Temple of Dum-Dum(试炼 3)

《Bomkus 博士的试炼》创作的幕后花絮。 《创作者焦点》系列共分为六部分&#xff0c;重点介绍《Bomkus 博士的试炼》的游戏创作过程及其独特的游戏功能。 Temple of Dum-Dum&#xff1a; Temple of Dum-Dum 是 Bomkus 博士试炼中的第三个挑战&#xff0c;该试炼由六项体验组成…