JavaScript(WebAPI)+具体案例

这篇具有很好参考价值的文章主要介绍了JavaScript(WebAPI)+具体案例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

JavaScript(WebAPI)+具体案例


JavaScript(WebAPI)+具体案例专栏简介: 前端从入门到进阶

JavaScript(WebAPI)+具体案例题目来源: leetcode,牛客,剑指offer.

JavaScript(WebAPI)+具体案例创作目标: 记录学习JavaEE学习历程

JavaScript(WebAPI)+具体案例希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长.

JavaScript(WebAPI)+具体案例学历代表过去,能力代表现在,学习能力代表未来! 


目录:

1. WebAPI 背景知识

1.1 什么是 WebAPI

1.2 DOM 基本概念

1.3 获取元素

2. 事件初识

基本概念

事件三要素

简单示例

3. 操作元素

3.1 获取/修改元素内容

3.2 获取/修改元素属性

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

3.4 获取/修改样式属性

4. 操作节点

新增节点

4.1 创建元素节点

4.2 插入节点到 dom 树中.

4.3 删除节点

5. 案例练习:

5.1 网页版猜数字

5.2 表白墙


1. WebAPI 背景知识

1.1 什么是 WebAPI

JS 的学习主要分为三个大的部分

  • ECMScript: 基础语法部分
  • DOM API: 操作页面结构
  • BOM API: 操作浏览器

WebAPI 就包含了 DOM + BOM

真正想要写一个更加复杂的有交互式的页面, 还需要WebAPI的支持.


1.2 DOM 基本概念

什么是 DOM?

DOM 全称 Document Object Model. 也叫文档对象模型.

其作用是把 html 中的每一个标签, 映射到 js 中的一个对应的对象. 相当于打通了代码和页面的通道, 通过 dom 就可以让 js 代码来操作页面元素.

W3C 标准为我们提供了一系列的函数, 让我们可以操作:

  • 网页内容
  • 网页结构
  • 网页样式

DOM 树

一个页面的结构是一个树形结构, 称为 DOM 树.

JavaScript(WebAPI)+具体案例

Tips:

  • 文档: 一个页面就是一个文档, 使用 document 表示
  • 元素: 页面中所有的标签都称为 元素 .使用 element 表示
  • 节点: 网页中所有内容都可以称为 节点 (标签节点, 文本节点, 属性节点等). 使用 node 表示.

这些文档等概念在 JS 代码中就对应一个个对象.所以才叫文本对象模型


1.3 获取元素

这部分工作类似于 CSS 选择器的功能.

querySelector

使用querySelecor 能够完全复用前面学过的 CSS 选择器知识, 达到更快捷更精确的方式获取到对象.

let element = document.querySelector(selectors);
  • selectors 包含一个或多个要匹配的选择器的 DOM 字符串 DOMString. 该字符串必须是有效的CSS选择器, 如果不是则引发 SYNTAX_ERR 异常
  • 正因为是参数选择器, 所以一定要通过特殊符号确定是哪种选择器.

eg: '.box' 是类选择器, '#star'是 id 选择器 

<div class="box">abc</div>
<div id = "id">def</div>
<h3>
    <span>
        <input type="text">
    </span>
</h3>
<script>
    let elem1 = document.querySelector('.box');
    console.log(elem1);
    let elem2 = document.querySelector('#id');
    console.log(elem2);
    let elem3 = document.querySelector('h3>span>input')
    console.log(elem3)
</script>
<body>

querySelectorAll

用法与querySelector 类似.

<div class="box">abc</div>
<div id = "id">def</div>
<script>
    let elem1 = document.querySelectorAll('div');
</script>

2. 事件初识

基本概念

JS 要构建动态页面, 就需要感知到用户的行为.

用户对于页面的一些操作(点击, 选择, 修改等)都会在浏览器中产生一个个事件, 被 JS 获取到, 从而进行更复杂的交互操作.

事件三要素

  • 1.事件源: 事件是哪个元素触发的?
  • 2.事件类型: 是点击, 选中, 还是修改?
  • 3.事件处理程序: 进一步如果处理, 往往是一个回调函数.

简单示例

<button id="btn">点我一下啦</button>
<script>
    let btn = document.getElementById('btn');
    btn.onclick = function(){
        alert("hello world");
    }
</script>
  • btn 按钮就是事件源.
  • 点击就是事件类型.
  • function 这个匿名函数就是事件处理程序.
  • 其中 btn.onclick = function() 这个操作称为 注册事件/绑定事件

Tips: 这个匿名函数就相当于一个回调函数, 这个函数不需要程序员主动调用, 而是交给浏览器, 由浏览器自动在合适的时机(触发点击操作时)进行调用


3. 操作元素

3.1 获取/修改元素内容

1) innerText

Element.innerText 属性表示一个节点及其后代的"渲染"文本内容

//读操作
let renderedText = HTMLElement.innerText;
//写操作
HTMLElement.innerText = string;

识别 html 标签, 读取结果不保留 html 源码中的换行 和 空格 

<div>
    <span>hello world</span>
    <span>hello world</span>
</div>
<script>
    let div = document.querySelector('div');
    //读取 div 内部内容
    console.log(div.innerText);
    // 修改 div 内部内容, 界面上就会同步修改
    div.innerText = 'hello js <span>hello js</span>';
</script>

可以看到, 通过 innerText 无法获取到 div 内部的 html 结构, 只能得到文本内容.

修改页面时也会把 span 标签当成文本进行设置.


 2) innerHTML

Element.innerHTML 属性设置或获取 HTML 语法表示的后代元素.

//读操作
let content = element.innerHTML;
//写操作
element.innerHTML = htmlString;
  • 1. 先获取到事件源的元素
  • 2. 注册事件

识别 html 标签, 读取结果保留 html 源码中的 换行 和 空格

<div>
    <span>hello world</span>
    <span>hello world</span>
</div>
<script>
    let div = document.querySelector('div');
    //读取 div 内部内容
    console.log(div.innerHTML);
    // 修改 div 内部内容, 界面上就会同步修改
    div.innerHTML = '<span>hello js </span>';
</script>

可以看到 innerHTML 不光能获取到页面的 html 结构, 同时也能修改结构, 并获取到内容保留的空格和换行.


3.2 获取/修改元素属性

通过 Element 对象的属性直接修改, 就能影响到页面的显示效果.

<img src="壁纸.jpg" alt="这是壁纸" title="壁纸">
<script>
    let img = document.querySelector('img');
    console.dir(img);
</script>

此时可以看到 img 这个 Element 对象中有很多属性.

JavaScript(WebAPI)+具体案例

 我们可以在代码中直接通过这些属性来获取属性的值.

<img src="壁纸.jpg" alt="这是壁纸" title="壁纸">
<script>
    let img = document.querySelector('img');
    console.log(img.src);
    console.log(img.title);
    console.log(img.alt);
</script>

JavaScript(WebAPI)+具体案例

 还可以直接修改属性

<img src="壁纸.jpg" alt="这是壁纸" title="壁纸">

<script>
    let img = document.querySelector('img');
    img.onclick = function(){
        if(img.src.lastIndexOf('壁纸.jpg') != -1){
            img.src = './jsy.png';
        }else{
            img.src = './壁纸.jpg';
        }
    }
</script>

此时点击图片就可以切换图片显示状态.(需提前把两个图片准备好)


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

表单(主要指 input 标签)的以下属性都可以通过 DOM 来修改.

  • value: input 的值
  • disable: 禁用
  • checked: 复选框会使用
  • selected: 下拉框会使用.
  • type: input 的类型(文本, 密码, 按钮, 文件等)

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

假定播放按钮, 在'播放' - '暂停' 之间切换

<input type="button" value="播放">
<script>
    let btn = document.querySelector('input');
    btn.onclick = function (){
        if(btn.value == '播放'){
            btn.value = '暂停'
        }else{
            btn.value = '播放'
        }
    }
</script>

代码示例: 全选/取消全选按钮

JavaScript(WebAPI)+具体案例

input type="checkbox" id="all">全选<br>
<input type="checkbox" class="girl">貂蝉<br>
<input type="checkbox" class="girl">小乔<br>
<input type="checkbox" class="girl">安琪拉<br>
<input type="checkbox" class="girl">妲己<br>

<script>
    //1. 获取到元素
    let all = document.querySelector('#all');
    let girls = document.querySelectorAll('.girl');
    //2. 给 all 注册点击事件, 选中/取消所有选项
    all.onclick = function(){
        for(let i = 0;i < girls.length;i++){
            girls[i].checked = all.checked;
        }
    }
    //3. 给 girl 注册点击事件
    for(let i = 0;i < girls.length;i++){
        girls[i].onclick = function(){
            //检测是不是当前的所有 girl 都被选中了
            all.checked = checkGirls(girls);
        }
    }
    //4. 实现 checkGirls
    function checkGirls(girls){
        for(let i = 0;i < girls.length;i++){
            if(!girls[i].checked){
                // 只要有一个 girl没有被选中, 就返回false
                return false;
            }
        }
        return true;
    }
</script>

3.4 获取/修改样式属性

1) 行内元素操作

代码示例: 点击文字则放大字体

<div style="font-size: 20px;">这是一个div, 点击之后字体放大</div>

<script>
    let div = document.querySelector('div');
    div.onclick = function(){
        //先获取到当前字体大小
        let fontSize = parseInt(div.style.fontSize);
        fontSize += 10;
        div.style.fontSize = fontSize + 'px';
    }
</script>

2) 类名样式操作

代码示例:切换夜间模式

<div id="one" class="light" style="font-size: 20; height: 500px;">这是一个div, 点击切换夜间模式</div>

<style>
    .light {
        color: black;
        background-color: white;
    }
    .dark {
        color: white;
        background-color: black;
    }
</style>
<script>
    let div = document.querySelector('#one');
    div.onclick = function(){
        if(div.className == 'light'){
            div.className = 'dark';
        }else{
            div.className = 'light';
        }
    }
</script>

4. 操作节点

新增节点

分成两个步骤:

  • 1. 创建元素节点.
  • 2. 把元素节点插入到 dom 树中.

第一步相当于生了个娃, 第二步相当于给娃上了个户口


4.1 创建元素节点

使用 createElement 方法来创建一个元素.option 参数暂不关注.

let elemnt = document.createElement(tagName[, options]);

代码示例:

<div class="container">

</div>
<script>
    let div = document.createElement('div');
    div.id = 'mydiv';
    div.className = 'box';
    div.innerHTML = 'hehe';
    console.log(div);
</script>

此时发现, 虽然创建出了新的 div 了, 但是 div 并没有显示到页面上. 这是因为新创建的节点并没有加入到 DOM 树中.

上面介绍的只是创建元素节点, 还可以使用:

  • createTextNode 创建文本节点
  • createComment 创建注释节点
  • createAttribute 创建属性节点

我们以 createElement 为主即可.


4.2 插入节点到 dom 树中.

使用 appendChild 将节点插入到指点节点的最后一个孩子之后(尾增)

<div class="container">

</div>
<script>
    let div = document.createElement('div');
    div.id = 'mydiv';
    div.className = 'box';
    div.innerHTML = 'hehe';
    
    let container = document.querySelector('.container');
    container.appendChild(div);
</script>

JavaScript(WebAPI)+具体案例


4.3 删除节点

使用 removeChild 删除子元素

oldChlid = parentElement.removeChild(child);
<ul>
    <li>11</li>
    <li>22</li>
</ul>
<script>
    let ul = document.querySelector('ul');
    for(let n = 3;n <= 10;n++){
        let li = document.createElement('li');
        li.innerHTML = n + '' + n;
        ul.appendChild(li);
    }
    //删除 33 这个元素
    let toDelete = document.querySelectorAll('li')[2];
    console.log(toDelete);
    ul.removeChild(toDelete);
</script>

JavaScript(WebAPI)+具体案例

  • child 为待删除节点
  • parentElement 为 child 的父节点
  • 返回值为被删除的节点
  • 被删除的节点只是从 DOM 树中删除, 依然保存在内存中, 可以随时加入到 DOM 树的其他位置.
  • 如果 child 节点不是 element 节点的子节点, 则该方法会抛出异常.

5. 案例练习:

5.1 网页版猜数字

<div>请输入要猜的数字</div>
    <input type="text">
    <button>提交</button>
    <!-- 显示结果 -->
    <div class="result"></div>

    <script>
        //1. 生成一个随机数
        let toGuess = parseInt(100 * Math.random() + 1);
        console.log(toGuess);
        //2. 进行猜数字操作
        let button = document.querySelector('button');
        let input = document.querySelector('input');
        let result = document.querySelector('.result');
        button.onclick = function(){
            //3. 取出输入框中的内容比较
            if(input.value == ''){
                return;
            }
            let inputNum = parseInt(input.value);
            if(inputNum < toGuess){
                alert('低了');
                result.innerHTML = '低了';
                input.value = '';
            }else if(inputNum > toGuess){
                alert('高了')
                result.innerHTML = '高了';
                input.value = '';
            }else{
                alert('恭喜你,猜对了!')
                result.innerHTML = '猜对了';
                input.value = '';
            }
        }
    </script>

5.2 表白墙

JavaScript(WebAPI)+具体案例文章来源地址https://www.toymoban.com/news/detail-409714.html

<!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>表白墙</title>
    <style>
        /* 选中页面所有元素 */
        * {
            /* 消除浏览器默认样式 */
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        .container {
            width: 600px;
            margin: 20px0 auto;
        }
        h1 {
            text-align: center;
        }
        p {
            text-align: center;
            color: #666;
            margin: 20px auto;
        }
        .row {
            display: flex;
            height: 40px;
            /* 水平方向居中 */
            justify-content: center;
            /* 垂直方向居中 */
            align-items: center;
        }
        .row span {
            width: 80px;
        }
        .row input {
            width: 200px;
            height: 30px;
        }
        .row button {
            width: 280px;
            height: 30px;
            color: white;
            background-color: orange;
            /* 去掉边框 */
            border: none;
            border-radius: 5px;
        }
        .row button:active {
            background-color: grey;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>表白墙</h1>
        <p>输入内容后点击提交, 会将信息显示在表格中</p>
        <div class="row">
            <span>谁: </span>
            <input type="text">
        </div>
        <div class="row">
            <span>对谁: </span>
            <input type="text">
        </div>
        <div class="row">
            <span>说</span>
            <input type="text">
        </div>
        <div class="row">
            <button id="submit">提交</button>
        </div>
        <div class="row">
            <button id="revert">撤销</button>
        </div>
    </div>
    <script>
        // 实现提交操作, 点击按钮, 就能把用户的输入提交到页面上
        // 点击的时候获取到三个输入框的文本内容
        let containerDiv = document.querySelector('.container');
        let inputs = document.querySelectorAll('input');
        let button = document.querySelector('#submit');
        button.onclick = function(){
            //1.获取到三个输入框中的内容
            let from = inputs[0].value;
            let to = inputs[1].value;
            let msg = inputs[2].value;
            if(from == ''||to == ''|| msg == ''){
                return;
            }
            //2.构造 div
            let rowDiv = document.createElement('div');
            rowDiv.className =  'row message';
            rowDiv.innerHTML = from + '对' + to + '说' + msg;
            containerDiv.appendChild(rowDiv);
            //3.清空之前输入框中的内容
            for(let input of inputs){
                input.value = '';
            }
        }
        let revertButton = document.querySelector('#revert');
        revertButton.onclick = function(){
            //删除最后一条消息
            //选中所有 row, 找出最后一个 row, 然后进行删除
            let rows = document.querySelectorAll('.message');
            if(rows == null || rows.length == 0){
                return;
            }
            containerDiv.removeChild(rows[rows.length - 1]);
        }
    </script>
</body>
</html>

到了这里,关于JavaScript(WebAPI)+具体案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ML+LLMs:利用LLMs大语言模型赋能或者结合ML机器学习算法进行具体应用的简介、具体案例之详细攻略

    ML+LLMs:利用LLMs大语言模型赋能或者结合ML机器学习算法进行具体应用的简介、具体案例之详细攻略 目录 利用LLMs赋能或者结合ML算法进行具体应用的简介

    2024年02月09日
    浏览(51)
  • 【前端】JavaScript简介

    人不走空                                                                              目录         🌈个人主页:人不走空       💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 JavaScript的基础 JavaScript进阶 现代Web开发与JavaScript JavaScript的未来 作

    2024年02月21日
    浏览(71)
  • 前端工作方式要换了?HTMX简介:无需JavaScript的动态HTML

    HTMX允许你使用扩展的HTML语法代替 JavaScript 来实现交互性。 HTMX 在标记中直接为你提供HTTP 交互,并支持许多其他交互需求,无需求助于 JavaScript。这是一个有趣的想法,可能最终会影响到web前端的工作方式。让我们看看如何使用HTMX以及它的吸引力。 HTMX已经存在了一段时间,

    2024年01月20日
    浏览(57)
  • MyBatisPlus入门案例与简介

    这一节我们来学习下MyBatisPlus的入门案例与简介,这个和其他课程都不太一样,其他的课程都是先介绍概念,然后再写入门案例。而对于MyBatisPlus的学习,我们将顺序做了调整,主要的原因MyBatisPlus主要是对MyBatis的简化,所有我们先体会下它简化在哪,然后再学习它是什么,以

    2023年04月12日
    浏览(39)
  • Vuex的简介以及入门案例

    Vuex介绍 Vuex是一种状态管理模式,它专为Vue.js应用程序开发设计。使用Vuex能够更好地组织Vue.js应用中的代码,并使代码更容易理解和维护。 Vuex把应用的状态(数据)集中存储到一个全局的store对象中,并使用mutations(同步任务)和actions(异步任务)来修改状态。Vuex的数据流

    2024年02月07日
    浏览(37)
  • JavaScript极速入门-综合案例(3)

    预期效果 代码实现 预期效果   需求: 按要求在文本框中输入内容,点击提交按钮,输入内容显示在页面下方. 代码实现 1.提前准备如下HTML和CSS代码 2.实现提交     1.HTML是一种超文本标记语言,主要用于页面内容的显示和排版.如果需要更漂亮的样式展示和页面效果,需要搭配CSS和

    2024年03月14日
    浏览(47)
  • Spring MVC简介附入门案例

    目录   一、SpringMVC简介 1.1 MVC模型 1.2 SpringMVC 二、SpringMVC入门案例 2.1 创建项目 2.2 引入依赖和tomcat插件 2.3 修改web.xml文件  2.4 新建springmvc.xml文件 2.5 编写控制器  2.6 配置运行方式 2.7 运行测试  三、SpringMVC执行流程 3.1 SpringMVC的组件 3.2 组件的工作流程 往期专栏文章

    2024年02月09日
    浏览(57)
  • 《JavaScript前端开发案例教程》课后习题及答案(黑马程序员编著)

    一、填空题 1.window.document.body可以简写为______。 2.console.log(alert(‘Hello’))在控制台的输出结果是______。 3.编辑器中“以UTF-8无BOM格式编码”中的BOM指的是______。 4.alert(‘测试’.length)的输出结果是______。 二、判断题 1.JavaScript是Java语言的脚本形式。( ) 2.JavaScript中的方法名不

    2024年02月09日
    浏览(56)
  • 【MyBatis-Plus】入门案例与简介

    1. 入门案例 MybatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提供效率。 开发方式 基于MyBatis使用MyBatisPlus 基于Spring使用MyBatisPlus 基于SpringBoot使用MyBatisPlus SpringBoot刚刚我们学习完成,它能快速构建Spring开发环境用以整合其他技术,使用起来是非常简

    2024年02月10日
    浏览(42)
  • sqoop入门简介 | 安装部署 | sqoop案例展示

    Sqoop (发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。 Sqoop项目开始于2009年,最早是作

    2024年02月04日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包