首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >WEB API教程

WEB API教程

作者头像
张哥编程
发布2024-12-13 19:24:02
发布2024-12-13 19:24:02
1.5K0
举报
文章被收录于专栏:云计算linux云计算linux

学习目标:

  • 掌握API和Web API的概念
  • 掌握常见的浏览器提供的API的调用方式
  • 能通过API开发常见的页面交互功能
  • 能够利用搜索引擎解决问题

Web API

Web API介绍

API的概念

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

  • 任何开发语言都有自己的API
  • API的特征输入和输出(I/O)
  • API的使用方法(console.log())
Web API的概念

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

此处的Web API特指浏览器提供的API(一组方法),Web API在后面的课程中有其它含义

掌握常见的浏览器提供的API的调用方式

MDN-Web API

JavaScript的组成
1496912475691.png
1496912475691.png
ECMAScript - JavaScript的核心

定义了javascript的语法规范

JavaScript的核心,描述了语言的基本语法和数据类型,ECMAScript是一套标准,定义了一种语言的标准与具体实现无关

BOM - 浏览器对象模型

一套操作浏览器功能的API

通过BOM可以操作浏览器窗口,比如:弹出框、控制浏览器跳转、获取分辨率等

DOM - 文档对象模型

一套操作页面元素的API

DOM可以把HTML看做是文档树,通过DOM提供的API可以对树上的节点进行操作

BOM

BOM的概念

BOM(Browser Object Model) 是指浏览器对象模型,浏览器对象模型提供了独立于内容的、可以与浏览器窗口进行互动的对象结构。BOM由多个对象组成,其中代表浏览器窗口的Window对象是BOM的顶层对象,其他对象都是该对象的子对象。

我们在浏览器中的一些操作都可以使用BOM的方式进行编程处理,

比如:刷新浏览器、后退、前进、在浏览器中输入URL等

BOM的顶级对象window

window是浏览器的顶级对象,当调用window下的属性和方法时,可以省略window 注意:window下一个特殊的属性 window.name

对话框
  • alert()
  • prompt()
  • confirm()
页面加载事件
  • onload
代码语言:javascript
复制
window.onload = function () {
  // 当页面加载完成执行
  // 当页面完全加载所有内容(包括图像、脚本文件、CSS 文件等)执行
}
  • onunload
代码语言:javascript
复制
window.onunload = function () {
  // 当用户退出页面时执行
}
定时器
setTimeout()和clearTimeout()

在指定的毫秒数到达之后执行指定的函数,只执行一次

代码语言:javascript
复制
// 创建一个定时器,1000毫秒后执行,返回定时器的标示
var timerId = setTimeout(function () {
  console.log('Hello World');
}, 1000);

// 取消定时器的执行
clearTimeout(timerId);
setInterval()和clearInterval()

定时调用的函数,可以按照给定的时间(单位毫秒)周期调用函数

代码语言:javascript
复制
// 创建一个定时器,每隔1秒调用一次
var timerId = setInterval(function () {
  var date = new Date();
  console.log(date.toLocaleTimeString());
}, 1000);

// 取消定时器的执行
clearInterval(timerId);
location对象

location对象是window对象下的一个属性,时候的时候可以省略window对象

location可以获取或者设置浏览器地址栏的URL

URL

统一资源定位符 (Uniform Resource Locator, URL)

  • URL的组成
代码语言:javascript
复制
scheme://host:port/path?query#fragment
scheme:通信协议
	常用的http,ftp,maito等
host:主机
	服务器(计算机)域名系统 (DNS) 主机名或 IP 地址。
port:端口号
	整数,可选,省略时使用方案的默认端口,如http的默认端口为80。
path:路径
	由零或多个'/'符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。
query:查询
	可选,用于给动态网页传递参数,可有多个参数,用'&'符号隔开,每个参数的名和值用'='符号隔开。例如:name=zs
fragment:信息片断
	字符串,锚点.
location有哪些成员?
  • 使用chrome的控制台查看
  • 查MDN MDN
  • 成员
    • assign()/reload()/replace()
    • hash/host/hostname/search/href……
案例

解析URL中的query,并返回对象的形式

代码语言:javascript
复制
function getQuery(queryStr) {
  var query = {};
  if (queryStr.indexOf('?') > -1) {
    var index = queryStr.indexOf('?');
    queryStr = queryStr.substr(index + 1);
    var array = queryStr.split('&');
    for (var i = 0; i < array.length; i++) {
      var tmpArr = array[i].split('=');
      if (tmpArr.length === 2) {
        query[tmpArr[0]] = tmpArr[1];
      }
    }
  }
  return query;
}
console.log(getQuery(location.search));
console.log(getQuery(location.href));
history对象
  • back()
  • forward()
  • go()
navigator对象
  • userAgent

通过userAgent可以判断用户浏览器的类型

  • platform

通过platform可以判断浏览器所在的系统平台类型.

DOM

DOM的概念

文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口。在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为DOM。Document Object Model的历史可以追溯至1990年代后期微软与Netscape的“浏览器大战”,双方为了在JavaScriptJScript一决生死,于是大规模的赋予浏览器强大的功能。微软在网页技术上加入了不少专属事物,既有VBScriptActiveX、以及微软自家的DHTML格式等,使不少网页使用非微软平台及浏览器无法正常显示。DOM即是当时蕴酿出来的杰作。

DOM又称为文档树模型

1497154623955.png
1497154623955.png
  • 文档:一个网页可以称为文档
  • 节点:网页中的所有内容都是节点(标签、属性、文本、注释等)
  • 元素:网页中的标签
  • 属性:标签的属性
模拟文档树结构
1497165666684.png
1497165666684.png
DOM经常进行的操作
  • 获取元素
  • 动态创建元素
  • 对元素进行操作(设置其属性或调用其方法)
  • 事件(什么时机做相应的操作)

获取页面元素

为什么要获取页面元素

例如:我们想要操作页面上的某部分(显示/隐藏,动画),需要先获取到该部分对应的元素,才进行后续操作

根据id获取元素
代码语言:javascript
复制
var div = document.getElementById('main');
console.log(div);

// 获取到的数据类型 HTMLDivElement,对象都是有类型的
// HTMLDivElement <-- HTMLElement <-- Element  <-- Node  <-- EventTarget

注意:由于id名具有唯一性,部分浏览器支持直接使用id名访问元素,但不是标准方式,不推荐使用。

根据标签名获取元素
代码语言:javascript
复制
var divs = document.getElementsByTagName('div');
for (var i = 0; i < divs.length; i++) {
  var div = divs[i];
  console.log(div);
}
根据name获取元素*
代码语言:javascript
复制
var inputs = document.getElementsByName('hobby');
for (var i = 0; i < inputs.length; i++) {
  var input = inputs[i];
  console.log(input);
}
根据类名获取元素
代码语言:javascript
复制
var mains = document.getElementsByClassName('main');
for (var i = 0; i < mains.length; i++) {
  var main = mains[i];
  console.log(main);
}
根据选择器获取元素
代码语言:javascript
复制
var text = document.querySelector('#text');
console.log(text);

var boxes = document.querySelectorAll('.box');
for (var i = 0; i < boxes.length; i++) {
  var box = boxes[i];
  console.log(box);
}
  • 总结
代码语言:javascript
复制
掌握
	getElementById()
	getElementsByTagName()
了解
	getElementsByName()
	getElementsByClassName()
	querySelector()
	querySelectorAll()

事件

事件:触发-响应机制

Event接口表示在DOM中发生的任何事件,一些是用户生成的(例如鼠标或键盘事件),而其他由API生成。

事件三要素
  • 事件源:触发(被)事件的元素
  • 事件类型:事件的触发方式(例如鼠标点击或键盘点击)
  • 事件处理程序:事件触发后要执行的代码(函数形式)
事件的基本使用
代码语言:javascript
复制
var box = document.getElementById('box');
box.onclick = function() {
  console.log('代码会在box被点击后执行');  
};
案例
  • 点击按钮弹出提示框
  • 点击按钮修改元素的样式

属性操作

非表单元素的属性

href、title、id、src、className

代码语言:javascript
复制
var link = document.getElementById('link');
console.log(link.href);
console.log(link.title);

var pic = document.getElementById('pic');
console.log(pic.src);

案例:

​ 点击按钮,切换img标签里的图片

​ 点击按钮显示隐藏div

  • innerHTML和innerText
代码语言:javascript
复制
var box = document.getElementById('box');
box.innerHTML = '我是文本<p>我会生成为标签</p>';
console.log(box.innerHTML);
box.innerText = '我是文本<p>我不会生成为标签</p>';
console.log(box.innerText);
  • HTML转义符
代码语言:javascript
复制
"		&quot;
‘		&apos;
&		&amp;
<		&lt;    //less than  小于
>		&gt;   // greater than  大于
空格	   &nbsp;
©		&copy;
  • innerHTML和innerText的区别
  • innerText的兼容性处理
表单元素属性
  • value 用于大部分表单元素的内容获取(option除外)
  • type 可以获取input标签的类型(输入框或复选框等)
  • disabled 禁用属性
  • checked 复选框选中属性
  • selected 下拉菜单选中属性
案例
  • 给文本框赋值,获取文本框的值
  • 点击按钮禁用文本框
  • 搜索文本框
  • 检测用户名是否是3-6位,密码是否是6-8位,如果不满足要求高亮显示文本框
  • 设置下拉框中的选中项
自定义属性操作
  • getAttribute() 获取标签行内属性
  • setAttribute() 设置标签行内属性
  • removeAttribute() 移除标签行内属性
  • 与element.属性的区别: 上述三个方法用于获取任意的行内属性。
样式操作
  • 使用style方式设置的样式显示在标签行内
代码语言:javascript
复制
var box = document.getElementById('box');
box.style.width = '100px';
box.style.height = '100px';
box.style.backgroundColor = 'red';
  • 注意 通过样式属性设置宽高、位置的属性类型是字符串,需要加上px
类名操作
  • 修改标签的className属性相当于直接修改标签的类名
代码语言:javascript
复制
var box = document.getElementById('box');
box.className = 'clearfix';
案例
  • 开关灯
  • 点击按钮变色
  • 图片切换二维码案例
  • 当前输入的文本框高亮显示
  • 点击按钮改变div的大小和位置
  • 列表隔行变色、高亮显示
  • 京东商品展示
  • tab选项卡切换

创建元素的三种方式

document.write()
代码语言:javascript
复制
document.write('新设置的内容<p>标签也可以生成</p>');
innerHTML
代码语言:javascript
复制
var box = document.getElementById('box');
box.innerHTML = '新内容<p>新标签</p>';
document.createElement()
代码语言:javascript
复制
var div = document.createElement('div');
document.body.appendChild(div);
性能问题
  • innerHTML方法由于会对字符串进行解析,需要避免在循环内多次使用。
  • 可以借助字符串或数组的方式进行替换,再设置给innerHTML
  • 优化后与document.createElement性能相近
案例
  • 动态创建列表,高亮显示
  • 根据数据动态创建表格
  • 模拟百度搜索文本框

节点操作

代码语言:javascript
复制
var body = document.body;
var div = document.createElement('div');
body.appendChild(div);

var firstEle = body.children[0];
body.insertBefore(div,firstEle);

body.removeChild(firstEle);

var text = document.createElement('p');
body.replaceChild(text, div);

案例:

​ 权限选择

节点层级

重点讲父子属性,兄弟属性画图讲解

代码语言:javascript
复制
var box = document.getElementById('box');
console.log(box.parentNode);
console.log(box.childNodes);
console.log(box.children);
console.log(box.nextSibling);
console.log(box.previousSibling);
console.log(box.firstChild);
console.log(box.lastChild);
  • 注意 childNodes和children的区别,childNodes获取的是子节点,children获取的是子元素 nextSibling和previousSibling获取的是节点,获取元素对应的属性是nextElementSibling和previousElementSibling获取的是元素 ​ nextElementSibling和previousElementSibling有兼容性问题,IE9以后才支持
  • 总结
代码语言:javascript
复制
节点操作,方法
	appendChild()
	insertBefore()
	removeChild()
	replaceChild()
节点层次,属性
	parentNode
	childNodes
	children
	nextSibling/previousSibling
	firstChild/lastChild

事件详解

注册/移除事件的三种方式
代码语言:javascript
复制
var box = document.getElementById('box');
box.onclick = function () {
  console.log('点击后执行');
};
box.onclick = null;

box.addEventListener('click', eventCode, false);
box.removeEventListener('click', eventCode, false);

box.attachEvent('onclick', eventCode);
box.detachEvent('onclick', eventCode);

function eventCode() {
  console.log('点击后执行');
}
事件的三个阶段
  1. 捕获阶段
  2. 当前目标阶段
  3. 冒泡阶段 事件对象.eventPhase属性可以查看事件触发时所处的阶段
事件对象的属性和方法
  • event.type 获取事件类型
  • clientX/clientY 所有浏览器都支持,窗口位置
  • pageX/pageY IE8以前不支持,页面位置
  • event.target || event.srcElement 用于获取触发事件的元素
  • event.preventDefault() 取消默认行为
案例
  • 跟着鼠标飞的天使
  • 获取鼠标在div内的坐标
阻止事件传播的方式
  • 标准方式 event.stopPropagation();
  • IE低版本 event.cancelBubble = true; 标准中已废弃
常用的鼠标和键盘事件
  • onmouseup 鼠标按键放开时触发
  • onmousedown 鼠标按键按下触发
  • onmousemove 鼠标移动触发
  • onkeyup 键盘按键按下触发
  • onkeydown 键盘按键抬起触发

特效

偏移量
  • offsetParent用于获取定位的父级元素
  • offsetParent和parentNode的区别
代码语言:javascript
复制
var box = document.getElementById('box');
console.log(box.offsetParent);
console.log(box.offsetLeft);
console.log(box.offsetTop);
console.log(box.offsetWidth);
console.log(box.offsetHeight);
1498743216279.png
1498743216279.png
客户区大小
代码语言:javascript
复制
var box = document.getElementById('box');
console.log(box.clientLeft);
console.log(box.clientTop);
console.log(box.clientWidth);
console.log(box.clientHeight);
1498743269100.png
1498743269100.png
滚动偏移
代码语言:javascript
复制
var box = document.getElementById('box');
console.log(box.scrollLeft)
console.log(box.scrollTop)
console.log(box.scrollWidth)
console.log(box.scrollHeight)
案例
  • 匀速动画函数
  • 回到顶部
  • 无缝轮播图
  • 拖拽案例

正则表达式

  • 了解正则表达式基本语法
  • 能够使用JavaScript的正则对象
正则表达式简介
什么是正则表达式

正则表达式:用于匹配规律规则的表达式,正则表达式最初是科学家对人类神经系统的工作原理的早期研究,现在在编程语言中有广泛的应用。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

正则表达式的作用
  1. 给定的字符串是否符合正则表达式的过滤逻辑(匹配)
  2. 可以通过正则表达式,从字符串中获取我们想要的特定部分(提取)
  3. 强大的字符串替换能力(替换)
正则表达式的特点
  1. 灵活性、逻辑性和功能性非常的强
  2. 可以迅速地用极简单的方式达到字符串的复杂控制
  3. 对于刚接触的人来说,比较晦涩难懂
正则表达式的测试
  • 工具中使用正则表达式
    • sublime/vscode/word
    • 演示替换所有的数字
正则表达式的组成
  • 普通字符
  • 特殊字符(元字符):正则表达式中有特殊意义的字符

示例演示:

  • \d 匹配数字
  • ab\d 匹配 ab1、ab2
元字符串

通过测试工具演示下面元字符的使用

常用元字符串

元字符

说明

\d

匹配数字

\D

匹配任意非数字的字符

\w

匹配字母或数字或下划线

\W

匹配任意不是字母,数字,下划线

\s

匹配任意的空白符

\S

匹配任意不是空白符的字符

.

匹配除换行符以外的任意单个字符

^

表示匹配行首的文本(以谁开始)

$

表示匹配行尾的文本(以谁结束)

限定符

限定符

说明

*

重复零次或更多次

+

重复一次或更多次

?

重复零次或一次

{n}

重复n次

{n,}

重复n次或更多次

{n,m}

重复n到m次

其它
代码语言:javascript
复制
[] 字符串用中括号括起来,表示匹配其中的任一字符,相当于或的意思
[^]  匹配除中括号以内的内容
\ 转义符
| 或者,选择两者中的一个。注意|将左右两边分为两部分,而不管左右两边有多长多乱
() 从两个直接量中选择一个,分组
   eg:gr(a|e)y匹配gray和grey
[\u4e00-\u9fa5]  匹配汉字
案例

验证手机号:

代码语言:javascript
复制
^\d{11}$

验证邮编:

代码语言:javascript
复制
^\d{6}$

验证日期 2012-5-01

代码语言:javascript
复制
^\d{4}-\d{1,2}-\d{1,2}$

验证邮箱 xxx@itcast.cn:

代码语言:javascript
复制
^\w+@\w+\.\w+$

验证IP地址 192.168.1.10

代码语言:javascript
复制
^\d{1,3}\(.\d{1,3}){3}$

JavaScript 中使用正则表达式

创建正则对象

方式1:

代码语言:javascript
复制
var reg = new Regex('\d', 'i');
var reg = new Regex('\d', 'gi');

方式2:

代码语言:javascript
复制
var reg = /\d/i;
var reg = /\d/gi;
参数

标志

说明

i

忽略大小写

g

全局匹配

gi

全局匹配+忽略大小写

正则匹配
代码语言:javascript
复制
// 匹配日期
var dateStr = '2015-10-10';
var reg = /^\d{4}-\d{1,2}-\d{1,2}$/
console.log(reg.test(dateStr));
正则提取
代码语言:javascript
复制
// 1. 提取工资
var str = "张三:1000,李四:5000,王五:8000。";
var array = str.match(/\d+/g);
console.log(array);

// 2. 提取email地址
var str = "123123@xx.com,fangfang@valuedopinions.cn 286669312@qq.com 2、emailenglish@emailenglish.englishtown.com 286669312@qq.com...";
var array = str.match(/\w+@\w+\.\w+(\.\w+)?/g);
console.log(array);

// 3. 分组提取  
// 3. 提取日期中的年部分  2015-5-10
var dateStr = '2016-1-5';
// 正则表达式中的()作为分组来使用,获取分组匹配到的结果用Regex.$1 $2 $3....来获取
var reg = /(\d{4})-\d{1,2}-\d{1,2}/;
if (reg.test(dateStr)) {
  console.log(RegExp.$1);
}

// 4. 提取邮件中的每一部分
var reg = /(\w+)@(\w+)\.(\w+)(\.\w+)?/;
var str = "123123@xx.com";
if (reg.test(str)) {
  console.log(RegExp.$1);
  console.log(RegExp.$2);
  console.log(RegExp.$3);
}
正则替换
代码语言:javascript
复制
// 1. 替换所有空白
var str = "   123AD  asadf   asadfasf  adf ";
str = str.replace(/\s/g,"xx");
console.log(str);

// 2. 替换所有,|,
var str = "abc,efg,123,abc,123,a";
str = str.replace(/,|,/g, ".");
console.log(str);
案例:表单验证
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-30,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • Web API
    • Web API介绍
      • API的概念
      • Web API的概念
      • 掌握常见的浏览器提供的API的调用方式
      • JavaScript的组成
    • BOM
      • BOM的概念
      • BOM的顶级对象window
      • 对话框
      • 页面加载事件
      • 定时器
      • location对象
      • history对象
      • navigator对象
    • DOM
      • DOM的概念
      • 模拟文档树结构
      • DOM经常进行的操作
    • 获取页面元素
      • 为什么要获取页面元素
      • 根据id获取元素
      • 根据标签名获取元素
      • 根据name获取元素*
      • 根据类名获取元素
      • 根据选择器获取元素
    • 事件
      • 事件三要素
      • 事件的基本使用
      • 案例
    • 属性操作
      • 非表单元素的属性
      • 表单元素属性
      • 案例
      • 自定义属性操作
      • 样式操作
      • 类名操作
      • 案例
    • 创建元素的三种方式
      • document.write()
      • innerHTML
      • document.createElement()
      • 性能问题
      • 案例
    • 节点操作
      • 节点层级
    • 事件详解
      • 注册/移除事件的三种方式
      • 事件的三个阶段
      • 事件对象的属性和方法
      • 阻止事件传播的方式
      • 常用的鼠标和键盘事件
    • 特效
      • 偏移量
      • 客户区大小
      • 滚动偏移
      • 案例
    • 正则表达式
      • 正则表达式简介
      • 正则表达式的测试
      • 正则表达式的组成
      • 元字符串
      • 案例
    • JavaScript 中使用正则表达式
      • 创建正则对象
      • 正则匹配
      • 正则提取
      • 正则替换
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档