js-webApi笔记1

目录

前言

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>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

最长上升子序列模型 笔记

首先附上模板&#xff1a; #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \nusing namespace std;typedef pair<int, int> PII; typedef long long ll;const int N 100010;int n; int a[N], q[N];int main()…

Linux脚本shell中将Windos格式字符转换为unix

众所周知&#xff0c;windos的文档直接复制到linux服务器上去&#xff0c;是需要进行格式转换的&#xff0c;否则可能出现以下报错&#xff1a; 解决方法&#xff1a; vim 脚本 输入 :set ff ##会显示字符格式 :set ffunix ##转换为unix格式 :wq ##保存退出

Word添加附件(附件图标被挡住的问题)

本文主要是为了记录一下自己使用word添加附件的时候遇到的一个坑&#xff0c;就是添加了附件&#xff0c;附件图标没有展示的问题。 选择 插入——对象&#xff0c;然后点击由文件创建然后再点击浏览本地电脑中的文件&#xff0c;选择需要添加的文件&#xff0c;当然也可以选择…

2019年五一杯数学建模B题木板最优切割方案解题全过程文档及程序

2019年五一杯数学建模 B题 木板最优切割方案 原题再现 徐州某家具厂新进一批木板如表 1 所示&#xff0c;在家具加工的过程中&#xff0c;需要使用切割工具生产表 2所示的产品。假设&#xff1a;木板厚度和割缝宽度忽略不计。   请为该家具厂给出如下问题的木板最优切割方…

解决k8s通过traefik暴露域名失败并报错:Connection Refused的问题

我敢说本篇文章是网上为数不多的解决traefik暴露域名失败问题的正确文章。 我看了网上太多讲述traefik夸夸其谈的文章了&#xff0c;包含一大堆复制粘贴的水文和还有什么所谓“阿里技术专家”的文章&#xff0c;讲的全都是错的&#xff01;基本没有一个能说到点子上去&#xf…

如何在3DMax中使用超过16个材质ID通道?

3DMAX效果通道扩展插件EffectsChannelEx教程 3DMax的材质ID通道允许我们生成渲染元素&#xff0c;这些元素可用于在合成或其他软件中产生处理或特殊效果。如对渲染或动画进行颜色校正。你可以在Photoshop中为你的静态3D渲染图像做这件事。或者使用After Effects、Blackmagic Fu…

【MySQL】表的增删改查(进阶)

一、数据库约束 1.1 约束类型 &#x1f693;NOT NULL - 指示某列不能存储 NULL 值。 &#x1f693;UNIQUE - 保证某列的每行必须有唯一的值。 &#x1f693;DEFAULT - 规定没有给列赋值时的默认值。 &#x1f693;PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列&…

阿里云2核2G3M带宽服务器,新老用户同价99元/年!续费不涨价!

作为双11服务器中备受用户关注的一款&#xff0c;轻量服务器2核2G3M带宽优惠价87元一年的价格令人惊喜。不仅价格实惠&#xff0c;而且配置也十分出色。2核2G的配置足够应对一般网站和轻量级应用的需求&#xff0c;同时3M的带宽也能够保障数据的快速传输。对于个人网站、小型企…

如何设计短域名系统

输入可能是 一个冗长的域名&#xff0c;过期时间和自定义的别名输出 自定义别名或者随机生成的短域名&#xff0c;在过期时间到来之前访问都可以被重定向到冗长的域名上约束条件 1.过期后就失效 2.短域名是唯一的 3.自定义短域名长度在7个字符&#xff08;不包含域名长度&am…

代码随想录算法训练营第五十五天丨 动态规划part16

583. 两个字符串的删除操作 思路 #动态规划一 本题和动态规划&#xff1a;115.不同的子序列 (opens new window)相比&#xff0c;其实就是两个字符串都可以删除了&#xff0c;情况虽说复杂一些&#xff0c;但整体思路是不变的。 这次是两个字符串可以相互删了&#xff0c;这…

中国又一家手机企业赶超苹果,逼得苹果降价抢占3000元市场

今年第44周的数据显示&#xff0c;苹果再次失去了中国手机市场第一名&#xff0c;这对于苹果希望iPhone15热销带动销量的目标受挫&#xff0c;难怪苹果在双十一竭尽全力降价抢占市场了。 苹果的iPhone15上市确实带动了一波销售&#xff0c;不过仅仅维持了两周&#xff0c;随后1…

“具有分布式能源资源的多个智能家庭的能源管理的联邦强化学习”文章学习二

一、准备工作 本篇文章所使用的缩写总结如下表。 Markov决策过程&#xff08;MDP&#xff09;被定义为元组&#xff08;S&#xff0c;A&#xff0c;P&#xff0c;R&#xff0c;T&#xff09;&#xff0c;其中S和A是有限的有效状态集和所有有效动作的有限集。函数P : SA→ P(S)是…

Java排序算法之归并排序

图解 归并排序是一种效率比较高的分治排序算法&#xff0c;主要分为两个步骤&#xff0c;分别为“分”和“并”。 分&#xff1a;将序列不断二分&#xff0c;直到每个子序列只有一个元素为止。 并&#xff1a;将相邻两个子序列进行合并&#xff0c;合并时比较两个子序列的元素…

BUUCTF 被劫持的神秘礼物 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 某天小明收到了一件很特别的礼物&#xff0c;有奇怪的后缀&#xff0c;奇怪的名字和格式。小明找到了知心姐姐度娘&#xff0c;度娘好像知道这是啥&#xff0c;但是度娘也不知道里面是啥。。。你帮帮小明&#xff1…

工作中积累的对K8s的就绪和存活探针的一些认识

首先&#xff0c;我的项目是基于 Spring Boot 2.3.5 的&#xff0c;并依赖 spring-boot-starter-actuator 提供的 endpoints 来实现就绪和存活探针&#xff0c;POM 文件如下图&#xff1a; 下面&#xff0c;再让我们来看下与该项目对应的Deployment的YAML文件&#xff0c;如下…

2023最新最全【虚幻4引擎】下载安装零基础教程

1、创建Epic Games账户 我们先打开浏览器&#xff0c;输入以下网址&#xff1a;unrealengine.com 随后点击【立即开始】 选择许可证类型&#xff0c;此处提供三种选项&#xff0c;分别是【游戏】、【非游戏】以及【私人定制】 第一类许可证适用于游戏和商业互动产品&#xff…

Java代码实现贪吃蛇游戏

一、创建新项目 创建一个新的项目&#xff0c;并命名。创建一个名为images的文件夹用来存放游戏相关图片。然后再在项目的src文件下创建一个com.xxx.view的包用来存放所有的图形界面类&#xff0c;创建一个com.xxx.controller的包用来存放启动的入口类(控制类)。如下所示&…

msvcp140.dll文件的丢失原因以及五个解决办法

在计算机使用过程中&#xff0c;我们常常会遇到一些错误提示&#xff0c;其中之一就是“msvcp140.dll丢失”。这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题&#xff0c;我们需要采取一些措施来修复丢失的msvcp140.dll文件。本文将介绍五个处理办法&#xff0…

【C++】深拷贝与浅拷贝

1、深拷贝与浅拷贝 当我们对复杂类型(结构体或者类)的对象进行初始化时&#xff0c;如果将同类型的对象A赋值给同类型的对象B&#xff0c;此时就涉及深拷贝和浅拷贝的问题。 浅拷贝&#xff1a;简单的赋值拷贝操作。把类/结构体的对象的属性原封不动的赋值给另一个同类型的对…

这可能测试全网最详细的Pytest教程

前言 关于自动化测试&#xff0c;这些年经历了太多的坑&#xff0c;有被动的坑&#xff0c;也有自己主动挖的坑&#xff0c;在这里做了一些总结。 主要思考总结下这些年来自动化测试过程中的一些基本的东西&#xff0c;例如何时进行自动化、如何自动化、或是怎么自动化我们的…