JavaWeb-JavaScript API

news2024/11/24 14:26:07

目录

  • DOM
  • 获取元素
  • 事务操作
  • 操作元素
    • 获取/修改元素属性
    • 获取/修改表单元素属性
      • 实现一个全选效果,主要是操作input的checked属性
    • 获取/修改元素样式
      • 点击放大字体
      • 夜间模式(关灯开灯)
  • 操作节点
    • 新增节点
    • 删除节点
  • 案例-猜数字
  • 案例-表白墙

DOM

DOM 全称为 Document Object Model.
W3C 标准给我们提供了一系列的函数, 让我们可以操作:

  • 网页内容
  • 网页结构
  • 网页样式
  • DOM树
    一个页面的结构是一个树形结构, 称为 DOM 树.

    树形结构在数据结构阶段会介绍. 就可以简单理解成类似于 “家谱” 这种结构

    页面结构形如:
    在这里插入图片描述
    DOM 树结构形如
    在这里插入图片描述
    在这里插入图片描述

    获取元素

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

    var element = document.querySelector(selectors);
    
    selectors 包含一个或多个要匹配的选择器的 DOM字符串 DOMString 。 该字符串必须是有效的
    
    CSS选择器字符串;如果不是,则引发 SYNTAX_ERR 异常
    表示文档中与指定的一组CSS选择器匹配的第一个元素的 html元素 Element 对象. 
    
    如果您需要与指定选择器匹配的所有元素的列表,则应该使用 querySelectorAll()
    
    可以在任何元素上调用,不仅仅是 document。 调用这个方法的元素将作为本次查找的根元素
    

    querySelectorAll
    使用 querySelectorAll 用法和上面类似

    事务操作

    事件三要素

    1. 事件源: 哪个元素触发的
    2. 事件类型: 是点击, 选中, 还是修改?
    3. 事件处理程序: 进一步如何处理. 往往是一个回调函数.
    <button id="btn">点我一下</button>
    <script>
    
        var btn = document.getElementById('btn');
        btn.onclick = function () {
            alert("hello world");
       }
    
    </script>
    
    btn 按钮就是事件源. 
    点击就是事件类型
    function 这个匿名函数就是事件处理程序
    其中 btn.onclick = function() 这个操作称为 注册事件/绑定事件
    

    操作元素

    通过dom对象.属性名就可以进行操作了

    获取/修改元素属性

    我们简单实现一个图片切换的方法,点击图片可以切换图片

    <!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>
    </head>
    <body>
        <img src="1.jpg" alt="">
    
        <script>
            let img = document.querySelector('img');
            img.onclick = function() {
                console.log(img.src);
                if (img.src.indexOf('1.jpg') >= 0) {
                    img.src = '2.jpg';
                } else if (img.src.indexOf('2.jpg') >= 0) {
                    img.src = '1.jpg';
                }
            }
        </script>
    
    </body>
    </html>
    

    在这里插入图片描述
    在这里插入图片描述
    一个HTML标签里,能写哪些属性,就同样可以通过JS中的DOM对象来获取一样的属性,可以通过console.dir这个方法,打印出一个dom对象的全部属性和值~

    获取/修改表单元素属性

    在这里插入图片描述

    实现一个全选效果,主要是操作input的checked属性

    <body>
    		<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++) {
    	                // all.checked 就是all这个复选框的选中状态
    	                girls[i].checked = all.checked;
    	            }
    	        }
    	        // 3. 针对每个girl 注册点击事件,实现对于all的取消操作
    	        for (let i = 0; i < girls.length; i++) {
    	            girls[i].onclick = function() {
    	                all.checked = checkGirls(girls);
    	            }
    	        }
    	
    	        function checkGirls(girls) {
    	            // 判定是不是所有的 girl 都被选中
    	            for (let i = 0; i < girls.length; i++) {
    	                if (!girls[i].checked) {
    	                    return '';
    	                }
    	            }
    	            return 'checked';
    	        }
    	</script>   
    </body>
    

    获取/修改元素样式

    1.style对应行内样式(直接把样式写到style里面)
    2.className/classList(对应内部样式/外部样式)应用了一个/一组CSS类名

    点击放大字体

    <body>
    		<div style="font-size: 20px;">这是一个文本</div>
    	<script>
    		let div = document.querySelector('div');
            div.onclick = function() {
                // 1. 先获取到当前字体的大小
                console.log(div.style.fontSize);
                let fontSize = parseInt(div.style.fontSize);
                // 2. 在当前字体大小的基础上, 多增加5px
                fontSize += 5;
                div.style.fontSize = fontSize + 'px';
            }
         </script>   
    </body>
    

    在这里插入图片描述
    在HTML中,表示类名的属性就是class,但是在JS里,属性名就变成了className/classList,class在JS中也是一个关键字。

    如果要修改的样式比较多,通过style就麻烦了,可以直接借助css类来修改

    夜间模式(关灯开灯)

    	<style>
            .light {
                background-color: #fff;
                color: #000;
            }
    
            .dark {
                background-color: #000;
                color: #fff;
            }
        </style>
        <div class="light" style="height: 500px">这是一段话</div>
    
        <button>关灯</button>
    		let div = document.querySelector('div');
            let button = document.querySelector('button');
            button.onclick = function() {
                if (div.className == 'light') {
                    div.className = 'dark';
                    button.innerHTML = '开灯';
                } else if (div.className == 'dark') {
                    div.className == 'light'
                    button.innerHTML = '关灯';
                }
            }
    

    操作节点

    新增节点

    1. 创建
    		let newDiv = document.createElement('div');
            newDiv.id = 'newDiv';
            newDiv.className = 'one';
            newDiv.innerHTML = 'hello';
            console.log(newDiv);
    

    在这里插入图片描述
    此处创建的节点,并没有挂在dom树上,因此浏览器页面中,是显示不出来的。
    2. 把节点挂在dom树上
    使用appendChild把节点插入到某个节点的子元素中。

    	let container = document.querySelector('.container');
        container.appendChild(newDiv);
    

    在这里插入图片描述

    删除节点

    使用 removeChild 删除子节点

    oldChild = element.removeChild(child);
    
    child 为待删除节点
    
    element 为 child 的父节点
    返回值为该被删除节点
    被删除节点只是从 dom 树被删除了, 但是仍然在内存中, 可以随时加入到 dom 树的其他位
    置. 
    
    如果上例中的 child节点 不是 element 节点的子节点,则该方法会抛出异常.
    

    案例-猜数字

    <!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>
    </head>
    <body>
        <button id="resetBtn">重新开始一局游戏</button><br>
        <span>要猜的数字:</span>
        <input type="text">
        <button id="guessBtn"></button><br>
        <span>结果:</span><span id="result"></span><br>
        <span>已经猜的次数:</span><span id="guessCount">0</span>
    
        <script>
            // 1. 先把上面需要用到的元素都拿到。
            let resetBtn = document.querySelector('#resetBtn');
            let input = document.querySelector('input');
            let guessBtn = document.querySelector('#guessBtn');
            let resultSpan = document.querySelector('#resultSpan');
            let guessCountSpan = document.querySelector('#guessCountSpan');
    
            // 2. 生成一个 1 - 100 的随机数字
            let toGuess = Math.floor(Math.random() * 100) + 1// 0 - 1 之间的数
            console.log(toGuess);
    
            // 3. 实现点击 猜 按钮的逻辑
            guessBtn.onclick = function() {
                // 1. 读取到input中的输入的内容,并转换成整数
                if (input.value == '') {
                    return;
                }
                let curNum = parseInt(input.value);
    
                // 2. 判定大小关系,并给出提示
                if (curNum < toGuess) {
                    // 低了
                    resultSpan.innerHTML = '低了';
                    resultSpan.style.color = 'red';
                } else if (curNum > toGuess) {
                    // 高了
                    resultSpan.innerHTML = '高了';
                    resultSpan.style.color = 'red';
                } else {
                    resultSpan.innerHTML = '猜对了!';
                    resultSpan.style.color = 'green';
                }
    
                // 3. 更新猜的次数
                let guessCount = parseInt(guessCountSpan.innerHTML);
                guessCountSpan.innerHTML = guessCount + 1;
            }
    
            // 4. 实现 reset 操作的逻辑(开始新游戏)
            resetBtn.onclick = function() {
                // 让页面刷新即可
                // location 是和 document并列关系的对象
                // location 用来控制页面的链接/地址
                location.reload();
            }
        </script>
    </body>
    </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>
    </head>
    <body>
        <div class="container">
            <h1>表白墙</h1> 
            <p>输入后点击提交, 会将信息显示在表格中</p> 
            <div class="row">
                <span>: </span> 
                <input class="edit" type="text">     
            </div>     
            <div class="row">
                <span>对谁: </span>
                <input class="edit" type="text">
            </div>
    
            <div class="row">
                <span>说什么: </span>
                <input class="edit" type="text">
            </div>
    
            <div class="row">
                <input type="button" value="提交" class="submit">
            </div>
        </div>
    	<style>
    	
    	    * {
    	        margin: 0;
    	        padding: 0;
    	    }
    	    .container {
    	        width: 400px;
    	        margin: 0 auto;
    	    }
    	    h1 {
    	        text-align: center;
    	        padding: 20px 0;
    	    }
    	    p {
    	        color: #666;
    	        text-align: center;
    	        font-size: 14px;
    	        padding: 10px 0;
    	    }
    	    .row {
    	        height: 40px;
    	        display: flex;
    	        justify-content: center;
    	        align-items: center;
    	    }
    	    span {
    	        width: 100px;
    	        line-height: 40px;
    	    }
    	    .edit {
    	        width: 200px;
    	        height: 30px;
    	    }
    	    .submit {
    	        width: 304px;
    	        height: 40px;
    	        color: white;
    	        background-color: orange;
    	        border: none;
    	    }
    	</style>
    	<script>
            // 给点击按钮注册点击事件
            let submit = document.querySelector('.submit');
            submit.onclick = function () {
                // 1. 获取到编辑框内容
                let edits = document.querySelectorAll('.edit');
                let from = edits[0].value;
                let to = edits[1].value;
                let message = edits[2].value;
                console.log(from + "," + to + "," + message);
                if (from == '' || to == '' || message == '') {
                    return;
                }
                // 2. 构造 html 元素
                let row = document.createElement('div');
                row.className = 'row';
                row.innerHTML = from + '对' + to + '说: ' + message;
                // 3. 把构造好的元素添加进去
                let container = document.querySelector('.container');
                container.appendChild(row);
                // 4. 同时清理之前输入框的内容
                for (var i = 0; i < 3; i++) {
                    edits[i].value = '';
                }
            }
        </script>
    </body>
    </html>
    

    在这里插入图片描述
    在这里插入图片描述

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

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

相关文章

【Spring6源码・MVC】请求处理流程源码解析

上一篇《【Spring6源码・MVC】初始化registry&#xff0c;完成url和controller的映射关系》我们知道&#xff0c;在IOC容器加载的同时&#xff0c;初始化了registry这个HashMap&#xff0c;这个HashMap中存放了请求路径和对应的方法。当我们请求进来&#xff0c;会通过这个regi…

合并两个有序链表-力扣21-java双百方案

一、题目描述将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a;输入&#xff1a;l1 [1,2,4], l2 [1,3,4]输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a;输入&#xff1a;l1 [], l2 []输出&#xff1…

C++中编译静态库与动态库

1.库的理解库就是写好的现有的&#xff0c;成熟的&#xff0c;可复用的代码。现实中每个程序都要依赖很多基础的底层库&#xff0c;不可能每个人的代码都从零开始&#xff0c;因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式&#xff0c;是预编译代码的集…

【Vue3】element-plus中el-tree的递归处理赋值回显问题

目录一&#xff1a;先获取所有权限tree二&#xff1a;在获取所有该角色能有的权限tree三&#xff1a;递归处理勾选tree节点由于项目是从0-1开始构建的 rbac都需要重新构建对接 所以涉及到了权限管理和菜单管理 一级菜单包含多个二级菜单 若二级不全选&#xff0c;则一级显示 半…

scipy超几何函数

文章目录hyp2f1广义超几何函数其他超几何函数hyp2f1 当c不是0,−1,⋯0,-1,\cdots0,−1,⋯时&#xff0c;对于∣z∣<1|z|<1∣z∣<1&#xff0c;超几何函数可表示为 2F1(a;b;c;z)∑n0∞a(n)b(n)c(n)znn!_2F_1(a;b;c;z)\sum^\infty_{n0}\frac{a^{(n)}b^{(n)}}{c^{(n)}}\…

TOOM告诉你企业舆情监测的重要性,企业舆情监测的意义

企业舆情监测是一种有效的企业管理手段&#xff0c;能够帮助企业了解舆情信息&#xff0c;从而更好地管理企业、保护企业利益&#xff0c;TOOM告诉你企业舆情监测的重要性&#xff0c;企业舆情监测的意义。 一、企业舆情监测的重要性 声誉管理&#xff1a;通过对企业在线和离…

pixhawk2.4.8使用调试记录—APM固件

目录一、硬件准备二、APM固件、MP地面站下载三、地面站配置1 刷固件2 机架选择3 加速度计校准4 指南针校准5 遥控器校准6 飞行模式7 紧急断电&无头模式8 基础参数设置9 电流计校准10 电调校准11 起飞前检查&#xff08;每一项都非常重要&#xff09;12 飞行经验四、遇到的问…

ESP8266_Linux环境搭建

工具链设置 适用于 Linux 的 ESP8266 工具链可从 Espressif 网站下载&#xff1a; 对于 64 位 Linux&#xff1a; https://dl.espressif.com/dl/xtensa-lx106-elf-gcc8_4_0-esp-2020r3-linux-amd64.tar.gz 对于 32 位 Linux&#xff1a; https://dl.espressif.com/dl/xten…

web自动化使用xpath轴定位

目录 XPath 轴&#xff08;Axes&#xff09; 一、定义&#xff1a;轴可定义相对于当前节点的节点集。 二、语法&#xff1a; 一、ancestor 选取当前节点的所有先辈(父&#xff0c;祖父等) 二、ancestor-or-self&#xff1a; 选取当前节点的所有先辈&#xff08;父、祖父等…

QT(11)- QThread

1 简介 QThread&#xff1a;具有可选事件循环的低级 API QThread是 Qt 中所有线程控制的基础。每个QThread实例表示并控制一个线程。 QThread可以直接实例化&#xff0c;也可以子类化。实例化QThread提供了一个并行事件循环&#xff0c;允许在辅助线程中调用QObject插槽。对 …

Leetcode力扣秋招刷题路-0037

从0开始的秋招刷题路&#xff0c;记录下所刷每道题的题解&#xff0c;帮助自己回顾总结 37. 解数独 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字…

React hooks之useEffect《类比Vue来记忆》(二)

系列文章目录 下面是正文 文章目录系列文章目录前言一、useEffect的三种形态1.useEffect不传第二个参数代码如下&#xff1a;效果图如下&#xff1a;2.useEffect第二个参数传 []代码如下&#xff1a;效果图如下&#xff1a;3.useEffect第二个参数传 [num]代码如下&#xff1a;效…

java图

1 图基本介 1.1 为什么要有图 前面我们学了线性表和树线性表局限于一个直接前驱和一个直接后继的关系树也只能有一个直接前驱也就是父节点当我们需要表示多对多的关系时&#xff0c; 这里我们就用到了图。 1.2 图的举例说明 图是一种数据结构&#xff0c;其中结点可以具有零…

VL10 使用函数实现数据大小端转换

一、function和task都是为了模块化、结构化设计&#xff0c;主要还是将重复性的功能封装起来方便调用。可以对返回值类型和范围不进行定义&#xff0c;默认值为reg型并且位宽为1变量类型说明 比如integer ifunction(其功能同之前的module模块类似)通常是用来描述组合逻辑&#…

Hi3861编译烧录更快捷

HUAWEI DevEco Device Tool是华为面向智能设备开发者提供的一站式集成开发环境。划重点&#xff0c;DevEco Device Tool 3.1 Beta2又上新技能啦——支持纯Windows环境开发Hi3861&#xff0c;显著提升编译、烧录效率&#xff0c;同时还带来了更多实用的功能及模板&#xff0c;为…

介绍项目前期调研、需求分析阶段的工作

title: 介绍项目前期调研、需求分析阶段的工作 date: 2019-07-07 16:06:00 tags: 需求分析前期调研 categories:架构 立项阶段 所谓立项就是公司内部进行研究、讨论决定要不要做这个事情&#xff0c;通常立项分成两个大类&#xff1a; 项目立项 相对比较简单&#xff0c;需…

欧几里得度量和余弦度量的可取消生物识别方案

欧几里得度量和余弦度量的可取消生物识别方案 便捷的生物识别数据是一把双刃剑&#xff0c;在为生物识别认证系统的繁荣铺平道路的同时&#xff0c;也带来了个人隐私问题。为了缓解这种担忧&#xff0c;提出了各种生物特征模板保护方案来保护生物特征模板免于信息泄露。现有提案…

大道至简 初识springboot

参考文档&#xff1a;springboot官方中文文档 开发工具&#xff1a;IntelliJ IDEA 入门 springboot介绍 Spring Boot帮助你创建可以运行的独立的、基于Spring的生产级应用程序。 我们对Spring平台和第三方库采取了有主见的观点&#xff0c;这样你就能以最少的麻烦开始工作。 …

Service基础使用

Service简介 Service是什么 Service是一个应用组件&#xff0c;它用来在后台完成一个时间跨度比较大的工作&#xff0c;且没有关联任何界面。 Service的生命周期方法在主线程运行。 使用场景 service用于在后台完成用户指定的操作。 访问网络&#xff1b;播放音乐&#xf…

指针的步长及意义(C语言基础)

指针的步长及意义 文章目录指针的步长及意义指针变量1后偏移的字节数不同指针[解引用](https://so.csdn.net/so/search?q解引用&spm1001.2101.3001.7020)时取出的字节数不同其他例子不同类型的指针有何不同的意义指针变量1后跳跃字节数量不同解引用的时候&#xff0c;取出…