JavaScript WebAPI 指南

JavaScript WebAPI 指南

    • [一、WebAPI 背景知识](#一、WebAPI 背景知识)
      • [1.1 什么是 WebAPI](#1.1 什么是 WebAPI)
      • [1.2 什么是 API](#1.2 什么是 API)
      • [1.3 API 参考文档](#1.3 API 参考文档)
    • [二、DOM 基本概念](#二、DOM 基本概念)
      • [2.1 什么是 DOM](#2.1 什么是 DOM)
      • [2.2 DOM 树](#2.2 DOM 树)
      • [2.3 重要概念](#2.3 重要概念)
    • 三、获取元素
    • 四、事件初识
      • [4.1 基本概念](#4.1 基本概念)
      • [4.2 事件三要素](#4.2 事件三要素)
      • [4.3 简单示例](#4.3 简单示例)
    • 五、操作元素
      • [5.1 获取/修改元素内容](#5.1 获取/修改元素内容)
      • [5.2 获取/修改元素属性](#5.2 获取/修改元素属性)
        • [5.2.1 获取属性](#5.2.1 获取属性)
        • [5.2.2 修改属性](#5.2.2 修改属性)
      • [5.3 获取/修改表单元素属性](#5.3 获取/修改表单元素属性)
        • [5.3.1 表单元素属性](#5.3.1 表单元素属性)
        • [5.3.3 代码示例:点击计数](#5.3.3 代码示例:点击计数)
      • [5.4 获取/修改样式属性](#5.4 获取/修改样式属性)
        • [5.4.1 行内样式操作](#5.4.1 行内样式操作)
        • [5.4.2 类名样式操作](#5.4.2 类名样式操作)
    • 六、操作节点
        • [6.1.1 创建元素节点](#6.1.1 创建元素节点)
        • [6.1.2 插入节点到 DOM 树中](#6.1.2 插入节点到 DOM 树中)
        • [6.1.3 使用`insertBefore`](#6.1.3 使用insertBefore)
        • [6.2 删除节点](#6.2 删除节点)
    • 七、代码案例
        • [7.1 猜数字游戏](#7.1 猜数字游戏)

一、WebAPI 背景知识

1.1 什么是 WebAPI

WebAPI 是 JavaScript 的重要组成部分,它包含了 DOM(文档对象模型)和 BOM(浏览器对象模型)。DOM 主要用于操作页面结构,BOM 用于操作浏览器窗口。WebAPI 是 W3C 组织规定的标准,是构建动态网页的基础。

参考文档: link

1.2 什么是 API

API(Application Programming Interface)是现成的函数和对象集合,供开发者使用。WebAPI 特指 DOM 和 BOM。API 可以看作是一个工具箱,帮助开发者快速实现功能。

1.3 API 参考文档

MDN(Mozilla Developer Network)提供了丰富的 WebAPI 文档,可以通过以下链接访问:

MDN WebAPI 文档(Web API | MDN)

二、DOM 基本概念

2.1 什么是 DOM

DOM(Document Object Model)是 W3C 标准的一部分,提供了一系列函数,用于操作网页内容、结构和样式。DOM 将网页视为一个树形结构,称为 DOM 树。

2.2 DOM 树

一个页面的结构是一个树形结构,形如:

html 复制代码
<html>
  <head>
    <title>文档标题</title>
  </head>
  <body>
    <a href="">我的链接</a>
    <h1>我的标题</h1>
  </body>
</html>

DOM 树结构形如:

复制代码
文档
├── 根元素:<html>
│   ├── 元素:<head>
│   │   └── 元素:<title>
│   │       └── 文本:文档标题
│   └── 元素:<body>
│       ├── 元素:<a>
│       │   └── 属性:href
│       │       └── 文本:我的链接
│       └── 元素:<h1>
│           └── 文本:我的标题

2.3 重要概念

• 文档:一个页面是一个文档,使用document表示。

• 节点:网页中所有的内容都可以称为节点(标签节点、注释节点、文本节点、属性节点等),使用node表示。

三、获取元素

3.1querySelector

querySelector是 HTML5 新增的方法,可以使用 CSS 选择器获取页面中的元素。返回文档中与指定选择器匹配的第一个元素。

javascript 复制代码
var elem1 = document.querySelector('.box');
var elem2 = document.querySelector('#id');
var elem3 = document.querySelector('h3 span input');

3.2querySelectorAll

querySelectorAll返回文档中与指定选择器匹配的所有元素的列表。

javascript 复制代码
var elems = document.querySelectorAll('div');

四、事件初识

4.1 基本概念

事件是用户对页面的操作(如点击、选择、修改等),这些操作会在浏览器中产生事件,被 JavaScript 获取并处理。

4.2 事件三要素

• 事件源:哪个元素触发的事件。

• 事件类型:如点击、选中、修改等。

• 事件处理程序:处理事件的函数。

4.3 简单示例

html 复制代码
<button id="btn">点我一下</button>
<script>
  var btn = document.getElementById('btn');
  btn.onclick = function() {
    alert("hello world");
  };
</script>

五、操作元素

5.1 获取/修改元素内容

5.1.1innerText

innerText表示一个节点及其后代的"渲染"文本内容。不识别 HTML 标签,是非标准的。

javascript 复制代码
var div = document.querySelector('div');
console.log(div.innerText); // 读取内容
div.innerText = 'hello js <span>hello js</span>'; // 修改内容
5.1.2innerHTML

innerHTML表示一个节点及其后代的 HTML 内容。识别 HTML 标签,是 W3C 标准的。

javascript 复制代码
var div = document.querySelector('div');
console.log(div.innerHTML); // 读取内容
div.innerHTML = '<span>hello js</span>'; // 修改内容

5.2 获取/修改元素属性

5.2.1 获取属性

可以通过Element对象的属性直接获取。

javascript 复制代码
var img = document.querySelector('img');
console.log(img.src); // 获取 src 属性
console.log(img.title); // 获取 title 属性
console.log(img.alt); // 获取 alt 属性
5.2.2 修改属性

可以直接修改Element对象的属性。

javascript 复制代码
var img = document.querySelector('img');
img.onclick = function() {
  if (img.src.lastIndexOf('rose.jpg') !== -1) {
    img.src = './rose2.png';
  } else {
    img.src = './rose.jpg';
  }
};

5.3 获取/修改表单元素属性

5.3.1 表单元素属性

表单元素(主要是input标签)的以下属性可以通过 DOM 修改:

value:输入框的值。

disabled:禁用状态。

checked:复选框的选中状态。

selected:下拉框的选中状态。

type:输入框的类型(文本、密码、按钮、文件等)。

5.3.2 代码示例:切换按钮文本

html 复制代码
<input type="button" value="播放">
<script>
  var btn = document.querySelector('input');
  btn.onclick = function() {
    if (btn.value === '播放') {
      btn.value = '暂停';
    } else {
      btn.value = '播放';
    }
  };
</script>
5.3.3 代码示例:点击计数
html 复制代码
<input type="text" id="text" value="0">
<input type="button" id="btn" value='点我+1'>
<script>
  var text = document.querySelector('#text');
  var btn = document.querySelector('#btn');
  btn.onclick = function() {
    var num = +text.value;
    num++;
    text.value = num;
  };
</script>

5.4 获取/修改样式属性

5.4.1 行内样式操作

通过style属性操作行内样式。

javascript 复制代码
var div = document.querySelector('div');
div.onclick = function() {
  var curFontSize = parseInt(this.style.fontSize);
  curFontSize += 10;
  this.style.fontSize = curFontSize + 'px';
};
5.4.2 类名样式操作

通过className属性操作类名样式。

javascript 复制代码
var div = document.querySelector('div');
div.onclick = function() {
  if (div.className.indexOf('light') !== -1) {
    div.className = 'container dark';
  } else {
    div.className = 'container light';
  }
};

六、操作节点

###6.1 新增节点

6.1.1 创建元素节点

使用document.createElement创建元素节点。

javascript 复制代码
var div = document.createElement('div');
div.id = 'mydiv';
div.className = 'box';
div.innerHTML = 'hehe';
console.log(div);
6.1.2 插入节点到 DOM 树中

使用appendChild将节点插入到指定节点的最后一个孩子之后。

javascript 复制代码
var container = document.querySelector('.container');
container.appendChild(div);
6.1.3 使用insertBefore

使用insertBefore将节点插入到指定节点之前。

javascript 复制代码
var newDiv = document.createElement('div');
newDiv.innerHTML = '我是新的节点';
var container = document.querySelector('.container');
container.insertBefore(newDiv, container.children[0]);
6.2 删除节点

使用removeChild删除子节点。

javascript 复制代码
var container = document.querySelector('.container');
var child = container.children[0];
container.removeChild(child);

七、代码案例

7.1 猜数字游戏
html 复制代码
<button type="button" id="reset">重新开始一局游戏</button><br>
<input type="text" id="guess">
<button type="button" id="button">猜</button>
<br>
已经猜的次数:<span id="count">0</span>
<br>
结果:<span id="result"></span>
<script>
  var inputE = document.querySelector('#guess');
  var countE = document.querySelector('#count');
  var resultE = document.querySelector('#result');
  var btn = document.querySelector('#button');
  var resetBtn = document.querySelector('#reset');
  var guessNumber = Math.floor(Math.random() * 100) + 1;
  var count = 0;

  btn.onclick = function() {
    var userGuess = parseInt(inputE.value, 10);
    if (isNaN(userGuess)) {
      resultE.innerText = '请输入一个有效的数字!';
      return;
    }
    count++;
    countE.innerText = count;

    if (userGuess === guessNumber) {
      resultE.innerText = '恭喜你猜对了!';
    } else if (userGuess < guessNumber) {
      resultE.innerText = '太小了,再试一次!';
    } else {
      resultE.innerText = '太大了,再试一次!';
    }
  };

  resetBtn.onclick = function() {
    guessNumber = Math.floor(Math.random() * 100) + 1;
    count = 0;
    countE.innerText = count;
    resultE.innerText = '';
    inputE.value = '';
  };
</script>
相关推荐
老毛肚17 小时前
jeecg-boot-base-core 02 day
javascript·python
yaoxin52112318 小时前
434. Java 日期时间 API - Period 基于日期的时间段
java·开发语言·python
凡人叶枫18 小时前
Effective C++ 条款30:透彻了解 inlining 的里里外外
linux·开发语言·c++·嵌入式开发·effective c++
学逆向的18 小时前
C++纯虚函数
开发语言·c++·网络安全
何极光18 小时前
IDEA集成Maven
java·maven·intellij-idea
程序员二叉19 小时前
【JUC】ThreadLocal底层原理|内存泄漏|弱引用|跨线程传递方案
java·开发语言·面试·职场和发展·juc
程序员二叉19 小时前
【JUC】线程池全套深度详解|参数|流程|拒绝策略|调优|异常处理
java·开发语言·jvm·算法·面试·juc
老马识途2.019 小时前
在AI的帮助下理解spring的启动过程
java·前端·spring
青山木19 小时前
Hot 100 --- 轮转数组
java·数据结构·算法
凡人叶枫20 小时前
Effective C++ 条款22:将成员变量声明为 private
linux·开发语言·c++