WEB APIs (5)

news2024/11/24 17:38:38

window对象

BOM(浏览器对象模型)

其为js操作浏览器提供了方法

window对象是一个全局变量,是BOM树根节点

BOM的属性和方法都是window的,如document、console.log()等

var定义在全局全局作用域中的变量、函数都会变成window对象属性和方法

定时器-延时函数

js内置让代码延迟执行的函数,setTimeout

语法:

setTimeout(回调函数,等待毫秒数)

仅执行一次

setTimeout返回的也是id

清除延时函数:

例子:广告自动消失

1.设置延时函数

2.隐藏元素

js执行机制

js一大特点只能是单线程;同一时间只能干一件事

js允许多线程(通过浏览器处理),因此出现同步与异步

同步任务

在主线程上执行,形成一个执行栈

异步任务

通过回调函数实现

三种类型:

普通事件,click、resize等

资源加载,load,error等

定时器,setInterval,setTimeout等

异步任务相关添加到任务队列

主线程执行完毕,查询任务队列,取出一个任务,推入主线程处理,重复动作

由于主线程不断地重复获得任务、执行任务,再获得任务、执行任务这种机制成为事件循环(event loop)

location对象

数据类型是对象,拆分并保存URL地址的各个组成部分

常用属性:

location.href属性获取完整的URL地址,对其赋值进行页面跳转

location.search属性获取地址中携带的参数,?后面部分

location.hash属性获取地址中携带的哈希值,#后面部分

常用于不刷新页面,显示不同页面

location.reload()用于刷新页面,location.reload(true)表示强制刷新

navigator对象

记录浏览器自身相关信息

属性方法

通过userAgent检测浏览器版本及平台

跳转的代码!

//检测userAgent(浏览器信息)

(function){
const userAgent= navigator.userAgent
//验证是否为Android或iPhone
const android = userAgent.match(/(Android);?[\s\/]+([\d.]+)?/)
const iphone = userAgent.match(/(iPhone\sOS)\s([\d_]+)/)
//如果是Android或Phone,则跳转至移动站点
if (android || iphone){
location.href = 'http://m.itcast.cn'
}
})();

history对象

主要管理历史纪录,该对象与浏览器地址栏的操作相对应,前进、后退、历史记录等。

history.back()<=>退后

history.forward()<=>前进

history.go(n)<=>前进n个页面

本地存储

数据储存在用户浏览器中,刷新不会丢失(永久性)

特性:

可以多窗口共享(同一浏览器)

以键值对形式存储使用

本地存储得到的只能是字符串

语法:

存储数据

localStorage.setItem('key',value)

添加会在其中显示

获取数据

localStorage.getItem('key')

删除数据

localStorage.removeItem('key')

改数据

只需要再写一遍localStorage.setItem('key',value)  改变value值即可

本地存储处理复杂数据类型

本地只能储存字符型,无法储存复杂数据类型

需要将复杂数据类型转化成JSON字符串,在储存到本地

语法:

JSON.stringfy()

JSON.parse()

将JSON字符串转换为对象

数组的map以及join方法

map(也称映射)遍历数组,处理数据,返回新的数组

数组join方法,将数组转化为字符串

参数是什么就用什么隔开

特殊的:

本地储存的案例:

涉及表单提交中 bottom与submit的关系

submit:默认form提交

bottom:响应用户自定义事件(可以监听)

<!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, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">

  <title>~</title>

  <link rel="shortcut icon" href="https://www.bilibili.com/favicon.ico">
  <link rel="stylesheet" href="css/初始化表.css">
  <meta name="keywords" content="..." />

  <style>
    /*写代码时始终要考虑权重问题!*/
    @font-face {
      font-family: 'icomoon';
      src: url('fonts/icomoon.eot?au9n7q');
      src: url('fonts/icomoon.eot?au9n7q#iefix') format('embedded-opentype'),
        url('fonts/icomoon.ttf?au9n7q') format('truetype'),
        url('fonts/icomoon.woff?au9n7q') format('woff'),
        url('fonts/icomoon.svg?au9n7q#icomoon') format('svg');
      font-weight: normal;
      font-style: normal;
      font-display: block;
    }

    .box {
      width: 1000px;
      height: 100%;
      margin: 100px auto;
      text-align: center;
    }

    h1 {
      margin: 40px;
    }

    h2 {
      margin-top: 40px;
    }

    input {
      width: 70px;
    }

    button {
      margin-left: 10px;
      background-color: #451af1;
      color: #fff;
      border-radius: 4px;
    }

    table {
      margin: 0 auto;
      border: #c8c7ca;
      width: 600px;
    }

    td {
      padding: 5px;
    }

    thead {
      background-color: #88cbf6;
      font-size: 14px;
    }

    a {
      color: white;
      display: inline-block;
      width: 45px;
      height: 15px;
      line-height: 15px;
      background-color: #eb6e07;
      cursor: pointer;
    }

    .title {
      width: 600px;
      height: 30px;
      line-height: 30px;
      padding-right: 15px;
      margin: 10px auto;
      text-align: right;
    }

    .title span {
      display: inline-block;
      color: #f26934;

    }
  </style>
</head>

<body>
  <div class="box">
    <h1>新增学员</h1>
    <form class="info" autocomplete="off">
      姓名:
      <input type="text" class="uname" name="uname">
      年龄:
      <input type="text" class="age" name="age">
      性别:
      <input type="text" class="sex" name="sex">
      薪资:
      <input type="text" class="salary" name="salary">
      就业城市:
      <select class="city" name="city">
        <option value="北京">北京</option>
        <option value="上海">上海</option>
        <option value="广州">广州</option>
        <option value="深圳">深圳</option>
        <option value="成都">成都</option>
      </select>
      <button class="add">录入</button>
    </form>
    <h2>就业榜</h2>
    <div class="title">
      共有数据<span>0</span>条
    </div>
    <table border="1" align="center" cellpadding="0" cellspacing="0">
      <thead>
        <tr>
          <td>学号</td>
          <td>姓名</td>
          <td>年龄</td>
          <td>性别</td>
          <td>薪资</td>
          <td>就业城市</td>
          <td>操作</td>
        </tr>
      </thead>

      <tbody>

      </tbody>
    </table>
  </div>

  <script>
    const info = document.querySelector('.info')
    const uname = document.querySelector('.uname')
    const age = document.querySelector('.age')
    const sex = document.querySelector('.sex')
    const salary = document.querySelector('.salary')
    const city = document.querySelector('.city')
    const button = document.querySelector('.add')
    const number = document.querySelector('.title span')
    const tbody = document.querySelector('tbody')
    const names = document.querySelectorAll('[name]')

    const arr = []

    function render() {

      const arr1 = arr.map((item,index) => {
        return `
        <tr>
          <td>${item.Id}</td>
          <td>${item.uname}</td>
          <td>${item.age}</td>
          <td>${item.sex}</td>
          <td>${item.salary}</td>
          <td>${item.city}</td>
          <td><a href="javascript:" data-id=${index}>delete</a></td>
        </tr>
        `
      })
      tbody.innerHTML = arr1.join('')
      number.innerHTML = arr1.length
    }

    info.addEventListener('submit', function (e) {
      e.preventDefault()
      for (let i = 0; i < names.length; i++) {
        if (names[i].value === '') {
          return alert('数据不能为空!')
        }
      }
      arr.push({
        Id: arr.length,
        uname: uname.value,
        age: age.value,
        sex: sex.value,
        salary: salary.value,
        city: city.value,
        time: new Date().toDateString()
      })

      render()
      this.reset()
      localStorage.setItem('data', JSON.stringify(arr))
    })

    tbody.addEventListener('click',function(e){
      if (e.target.tagName==='A' && confirm('是否删除?'))
      {
        arr.splice(e.target.dataset.id,1)
        render()
        localStorage.setItem('data', JSON.stringify(arr))
      }
    })

  </script>

</body>

</html>

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

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

相关文章

参数引入和全局变量引入实现-目标和

LCR 102. 目标和 - 力扣&#xff08;LeetCode&#xff09; 分析题意&#xff0c;画出决策树&#xff0c;其他的思路都跟前面讲过的类似&#xff1a; 全局变量引入实现&#xff1a; 全局变量的引入&#xff0c;需要手动处理回溯&#xff1b; class Solution {int ret; //…

群晖Synology Drive服务搭建结合内网穿透实现云同步Obsidian笔记文件夹

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-ebec69DBjtGk7apF {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

Linux:进度条的实现

使用工具的简单介绍&#xff1a; 在创建进度条之前&#xff0c;首先要明白两个工具&#xff0c;fflush 和 \r 。 \r 回车键的功能其实是两个&#xff0c;一个是换行&#xff0c;一个是回车。所谓换行就是将光标从这一行变到下一行中&#xff0c;且是垂直下落&#xff0c…

【详识JAVA语言】类和对象

面向对象的初步认知 什么是面向对象 Java是一门纯面向对象的语言(Object Oriented Program&#xff0c;简称OOP)&#xff0c;在面向对象的世界里&#xff0c;一切皆为对象。面向对象是解决问题的一种思想&#xff0c;主要依靠对象之间的交互完成一件事情。用面向对象的思想来…

leetcode移除元素

注意&#xff0c;在本题中&#xff0c;是对原数组进行操作&#xff0c;需要原地删除指定元素&#xff0c;所以我们可以采用快慢指针来操作。 顾名思义&#xff0c;快慢指针是有两个指针&#xff0c;一直快指针&#xff0c;一个慢指针。在本题中&#xff0c;快慢指针起点都是0&a…

MATLAB:Image Processing Toolbox工具箱入门实战

目录 1.基本图像导入、处理和导出 2.实战项目一&#xff1a;利用imfindcircles()函数检测和测量图像中的圆形目标 1.基本图像导入、处理和导出 Basic Image Import, Processing, and Export- MATLAB & SimulinkThis example shows how to read an image into the worksp…

在vue前端开发中基于refreshToken和axios拦截器实现token的无感刷新

文章目录 一、需求背景二、token刷新的方案1、根据过期时间重新获取2、定时刷新token接口3、使用了RefreshToken 三、关于RefreshToken四、Refresh Token的优点五、Refresh Token的工作原理六、Refresh Token的使用流程七、Refresh Token的实现步骤1、登录成功后保存AccessToke…

Studio One 6永久激活版 附完整图文安装破解教程

Studio One 6是一款功能强大的音乐制作和录音软件&#xff0c;专为Mac操作系统设计。它提供了多轨录音和混音、MIDI音乐制作、实时效果和处理、VST插件支持以及高级编辑和编排等丰富的功能。无论是专业音乐制作人还是音乐爱好者&#xff0c;都可以使用Studio One 6来创建和编辑…

爬虫案例一

首先我举一个案例比如豆瓣电影排行榜 (douban.com)这个电影&#xff0c;首先我们进去检查源代码 说明源代码有&#xff0c;说明是服务器渲染&#xff0c;可以直接那html 但是返回的结果是空&#xff0c;所以我们需要在头里面加上User-Agent 然后可以看到有返回的结果&#xff0…

网络学习:MPLS标签与标签分配协议—LDP

目录 前言&#xff1a; 一、MPLS标签 1、定义&#xff1a; 2、标签结构&#xff1a; 3、标签识别&#xff1a; 二、标签分配协议---LDP&#xff08;Lable Distribution Protocol&#xff09; 1、定义&#xff1a; 2、标签分配协议的种类&#xff1a; 3、LDP消息类型 …

C/C++平方和问题(蓝桥杯)

题目描述&#xff1a; 小明对数位中含有2、0、1、9 的数字很感兴趣&#xff0c;在1 到40 中这样的数包 括1、2、9、10 至32、39 和40&#xff0c;共28 个&#xff0c;他们的和是574&#xff0c;平方和是14362。 注意&#xff0c;平方和是指将每个数分别平方后求和。 请问&#…

从零开始学习Netty - 学习笔记 -Netty入门【协议设计和解析】

2.协议设计和解析 协议 在计算机中&#xff0c;协议是指一组规则和约定&#xff0c;用于在不同的计算机系统之间进行通信和数据交换。计算机协议定义了数据传输的格式、顺序、错误检测和纠正方法&#xff0c;以及参与通信的各个实体的角色和责任。计算机协议可以在各种不同的层…

第四十九回 吴学究双掌连环计 宋公明三打祝家庄-Python与HTTP服务交互

吴用请戴宗从梁山请来铁面孔目裴宣、圣手书生萧让、通臂猿侯健、玉臂匠金大坚来帮忙。又告诫扈家庄的扈成&#xff0c;打起来不要去帮祝家庄。 孙立把旗号改成“登州兵马提辖孙立”&#xff0c;来祝家庄找峦廷玉&#xff0c;被热情接待。 第三天&#xff0c;宋江派小李广花荣…

001 GUI编程简介

一个知识该怎么学&#xff1f; 这是什么该怎么玩能干什么 图形化程序应该包含并不限于如下组件 窗口弹窗面板文本框列表框按钮图片监听事件鼠标键盘事件 GUI介绍 核心技术&#xff1a;Swing与AWT 不流行原因&#xff1a;界面不美观、需要JRE环境 仍然学习的原因&#xf…

备战蓝桥杯---树形DP基础3

上一次我们讲了二叉苹果树&#xff0c;现在我们加一点难度&#xff0c;从二叉变成了多叉苹果树。 这样子我们就不可以直接按照上次的方法DP&#xff0c;我们其实可以发现&#xff0c;我们可以用类似背包的思想求解&#xff0c;这就是所谓的树上背包。 我们先加进第一个儿子来…

骨传导耳机哪个牌子好?六大选购窍门,帮你甩掉坑货!

很多用户对骨传导耳机的理解存在偏差&#xff0c;认为只要选择价格贵的、热度高的产品就能万事大吉&#xff0c;而实际却不是如此&#xff0c;要知道&#xff0c;随着骨传导耳机逐渐成为热门款式&#xff0c;目前的市场上的骨传导耳机品牌也变得五花八门&#xff0c;这其中就包…

springboot230基于Spring Boot在线远程考试系统的设计与实现

在线远程考试系统设计与实现 摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到…

数据库学习案例20240304-mysql数据库案例总结(碎片,统计信息)

1 表中的碎片 在InnoDB中删除行的时候&#xff0c;这些行只是被标记为“已删除”&#xff0c;而不是真正从物理存储上进行了删除&#xff0c;因而存储空间也没有真正被释放回收。InnoDB的Purge线程会异步地来清理这些没用的索引键和行。但是依然没有把这些释放出来的空间还给操…

ES核心概念(45-48)(56-62)(101-103)

ES集群 ES集群&#xff08;Cluster&#xff09;包含多个节点&#xff08;服务器&#xff09;&#xff0c;整体提供服务 核心概念 索引Index&#xff1a;类似于mysql中的表 映射Mapping:数据的结构信息 文档&#xff1a;相当于表中的一条记录 分片&#xff1a; 将数据分成多片…

4、pod运维replicationCtroller、replicaSet、DeamonSet、Job、Cronjob

1、kubenetes 会自动重新运行失败的pod应用 pod运行失败&#xff0c;会自动重启&#xff0c;但是节点失败&#xff0c;pod会被移除&#xff0c; 除非配置了relicationController来管理资源 2、保持pod的健康存活 配置探针&#xff0c;发送http请求 3、查看前一个pod的运行日…