JS中的事件和DOM操作

news2024/12/26 12:19:31

一、事件[重要]

1、 事件介绍

事件: 就是发生在浏览器(页面)上一件事,键盘事件,鼠标事件,表单事件,加载事件等等

2、 事件绑定方式

事件要想发生,就得将事件和标签先绑定(确定哪个标签发生什么事情,又有什么响应)


一个完整的事件有三部分

  • 事件源(标签),哪里发出的事.

  • 什么事(事件)

  • 响应(动作效果)


事件绑定,其实就是事件和标签绑定

  • 方式1: 事件源,事件,响应在一起(都写在标签内)

  • 方式2: 事件源,事件在一起(写标签内),响应抽取函数(写script)

  • 方式3: 事件和响应全部抽取(标签是单独标签,事件和响应写在js中)

方式1: 事件源,事件,响应在一起

  <body>
    <!-- 事件源(标签),事件,响应(函数) -->
    <!-- 方式1: 事件源,事件,响应在一起 -->
    <!-- onclick是单击事件,是html属性 -->
    <!-- alert() 函数就是事件的响应 -->
    <button type="button" onclick="alert('听说你点我了?')">按钮</button>
  </body>

方式2: 事件源,事件在一起,响应抽取函数

  <body>
    <hr />
    <!-- 方式2: 事件源,事件在一起,响应抽取函数 -->
    <button type="button" onclick="dian()">按钮</button>
    <script>
      // 定义函数
      function dian() {
        alert("你又点我?!");
      }
    </script>
  </body>

方式3【重要】: 事件和响应全部抽取

    <!-- 方式3: 事件和响应全部抽取 -->
    <button id="btn">再点一下试试</button>
    <script>
      // 1) 先获得标签对象
      var btn = document.getElementById("btn");
      // 2) 给标签对象设置事件以及响应,注意是匿名函数
      btn.onclick = function () {
        alert("上瘾了是不是?!");
      };
    </script>

3、 不同事件的演示

这些事件,都是html中标签的属性,都是以onxxx开头

事件名称描述
onchangeHTML 元素内容改变
onblur输入框失去焦点
onfocus输入框获得焦点
onclick用户点击 (单击)HTML 元素
ondblclick用户双击HTML元素
onmouseover用户将鼠标移入一个HTML元素中
onmousemove用户在一个HTML元素上移动鼠标
onmouseout用户从一个HTML元素上移开鼠标
onkeydown用户按下键盘按键
onkeyup键盘弹起
onkeypress按压键盘
onload浏览器已完成页面的加载
onsubmit表单提交

3.1 鼠标事件

    <script>
      var box = document.getElementById("box");
      // 鼠标移动,只要鼠标动,就会触发函数
      box.onmousemove = function () {
        console.log("鼠标移动");
      };
​
      // 鼠标移入,移入进一次,触发一次
      box.onmouseover = function () {
        console.log("鼠标移入");
      };
​
      // 鼠标离开
      box.onmouseout = function () {
        console.log("鼠标离开");
      };
    </script>

3.2 键盘事件

    <script>
      var i = document.getElementById("i");
      // 事件触发后,函数有对应的事件对象
      // 键盘按下
      i.onkeydown = function (event) {
        // console.log("键盘按下");
        // event是事件对象,内部包含事件的所有信息
        // console.log(event);
        // 可以获得这次键盘事件的代号,13是回车键
        if (event.keyCode == 13) {
          console.log("提交表单");
        }
      };
      // 键盘弹起
      i.onkeyup = function () {
        // console.log("键盘弹起");
      };
      // 键盘按压(与按下效果一样)
      i.onkeypress = function () {
        // console.log("键盘按压");
      };
    </script>

3.3 表单事件【重点】

是指表单中能用上的一系列事件

  • onblur 失去焦点

  • onfocus 获得焦点

  • onchange 内容改变

  • onsubmit 表单提交

  <body>
    <div>
      <!-- 
            因为tijiao()函数,返回有了true/false
            所以onsubmit="return true" 即提交表达
               onsubmit="return false" 阻止表达提交
         -->
      <form accept="/java2301" onsubmit="return tijiao()">
        用户名<input id="i1" type="text" name="username" /><br />
        密码<input type="password" name="password" /><br />
        籍贯<select id="jiguan" name="jigaun">
          <option>河南</option>
          <option>河北</option>
          <option>北京</option>
        </select>
        <input type="submit" value="提交" />
      </form>
      <script>
        var i1 = document.getElementById("i1");
        // 绑定获得焦点事件
        i1.onfocus = function () {
          // 将来可以通过操作DOM,获得输入框的值,也可以改变样式
          console.log("输入框获得焦点");
        };
​
        // 绑定失去焦点
        i1.onblur = function () {
          console.log("输入框失去焦点");
        };
​
        var jiguan = document.getElementById("jiguan");
        // 给下拉框绑定内容改变事件
        jiguan.onchange = function () {
          // 将来配合DOM操作,可以获得改变的内容,做一些其他事情
          // 可以用于省市二级联动
          console.log("内容改变");
        };
​
        /*
         1) 表单事件是表单form的事件,所以这个事件要绑定在form上
         2) 函数要返回true/false
         3) onsubmit中也要写return
        */
        function tijiao() {
          console.log("点击提交按钮");
          // return 返回false,认为表达不提交
          // 返回true.表达就会提交
          // 一般用来数据校验
          return true;
        }
      </script>
    </div>
  </body>

3.4 加载事件【重点】

浏览器加载页面,是瀑布式加载,即从上之下依次加载执行. 如果JS代码在上方,就有可能出现有部分下方html代码加载不到导致js操作出错

  • 加载事件是指等页面加载完后才会触发的事件

  <head>
    <title>加载事件</title>
    <script>
      /*
        解决方案,等页面加载完后,再触发函数,执行绑定事件
        页面加载事件是窗口对象的事件
        该函数onload,会在页面加载后触发函数
        */
      window.onload = function () {
        var btn = document.getElementById("btn");
        btn.onclick = function () {
          alert("试试就试试!");
        };
      };
    </script>
  </head>
  <body>
    <button id="btn">点我一下试试?!</button>
  </body>

二、DOM操作

1、 概述

  • 通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素。

  • 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。

  • HTML DOM 模型被构造为对象的树:

  • 有了DOM树,就可以通过树来查找节点(元素),找到元素就可以对元素进行操作(修改,删除,添加),还可以操作元素的样式

    • JavaScript 能够改变页面中的所有 HTML 元素。

    • JavaScript 能够改变页面中的所有 HTML 属性。

    • JavaScript 能够改变页面中的所有 CSS 样式。

    • JavaScript 能够对页面中的所有事件做出反应。

2、 查找元素

查找元素(标签)有很多方式

  • 通过id查找元素

    • document.getElementById("id属性值");

    • 如果找到该元素,则该方法将以对象(在 x 中)的形式返回该元素。

    • 如果未找到该元素,则 x 将包含 null。

  • 通过标签名查找元素

    • 方法:getElementsByTagName("合法的元素名");

    • 如果找到,返回的是数组

  • 通过class查找元素

    • 方法:getElementsByClassName("class属性的值")

    • 如果找到,返回的是数组

  <body>
    <!-- 给标签设置id属性,id值要唯一 -->
    <button id="btn">按钮</button>
    <ul>
      <li>貂蝉</li>
      <li>西施</li>
      <li>王昭君</li>
      <li>杨玉环</li>
      <li class="xd">黎姿</li>
      <li class="xd">利智</li>
      <li class="xd">张曼玉</li>
      <li class="xd">朱茵</li>
    </ul>
    <script>
      // 方式1:通过id获得标签对象(对象是唯一)
      var btn = document.getElementById("btn");
      // console.log(btn);
​
      // 方式2:通过标签名来获得
      // 因为有同名,返回的是所有同名标签对象,放入数组中返回
      var liArr = document.getElementsByTagName("li");
      // console.log(liArr);
      for (var i = 0; i < liArr.length; i++) {
        // console.log(liArr[i]);
      }
​
      // 方式3: 通过类名获得标签对象
      var mvArr = document.getElementsByClassName("xd");
      console.log(mvArr);
    </script>
  </body>

3、 元素内容的查找和设置

元素内容,是指标签开闭之间的内容.

<p>这就是内容</p>
<p><span>这就是内容</span></p>

查找和设置使用的是相同的属性

  • innerHTML 获得或设置标签的内容

  • innerText 获得或设置标签的内容

  <body>
    <p id="p1"><span>你好啊,JavaScript</span></p>
    <button id="btn1">设置innerHTML</button>
    <button id="btn2">设置innerText</button>
    <script>
      var p1 = document.getElementById("p1");
      // 获得内容,innerHTML获得是标签和内容
      var innerHTML = p1.innerHTML;
      console.log(innerHTML);
​
      // 获得内容,innerText获得的只是文本内容
      var innerText = p1.innerText;
      console.log(innerText);
​
      var btn1 = document.getElementById("btn1");
      btn1.onclick = function () {
        // 给p标签设置内容,内容中有标签会解析成标签
        p1.innerHTML = "<span>你好啊,李焕英</span>";
      };
​
      var btn2 = document.getElementById("btn2");
      btn2.onclick = function () {
        // 给p标签设置内容,内容全部解析为文本
        p1.innerText = "<span>你好啊,李焕英</span>";
      };
    </script>
  </body>

4、 元素属性的查找和设置

元素属性,是指开标签内的属性,通过dom对象直接调用操作.比如

  • domObj.id

  • domObj.name

  • domObj.value

  • ...

  <body>
    <input id="i1" class="c1" type="text" value="默认值" />
    <button id="btn1">点击获得属性值</button>
    <button id="btn2">点击设置属性值</button>
    <script>
      var btn1 = document.getElementById("btn1");
      var i1 = document.getElementById("i1");
​
      btn1.onclick = function () {
        // 获得属性值
        console.log(i1.id); // 获得id属性值
        console.log(i1.class); // 没有获得class属性
        console.log(i1.type); // 获得type属性值
        console.log(i1.value); // 获得value属性值【重要】
      };
​
      btn2.onclick = function () {
        // 设置属性值
        i1.type = "password";
        i1.value = "123456";  // 【重要】
      };
    </script>
  </body>

5、 元素CSS样式的查找和设置

元素css样式的查找和设置,是指标签中style的属性值的获得和设置

  • 获得属性值

    • 元素对象.style.属性

  • 设置属性值

    • 元素对象.style.属性 = ""

  <body>
    <div
      id="box"
      style="width: 200px; height: 200px; background-color: red"
    ></div>
    <button id="btn1">获得css样式</button>
    <button id="btn2">设置css样式</button>
  </body>

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

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

相关文章

【DAY20240925】随机梯度下降:高效优化背后的原理与进阶策略

文章目录 前言随机梯度下降SGDMini-batch 随机梯度下降常见优化算法的改进版本 前言 梯度下降更新的通用形式&#xff1a; 论文中类似的表达形式&#xff0c;都表示根据 损失函数对这些参数的梯度 进行更新参数。梯度值较大时&#xff0c;说明当前控制参数对损失有较大的影响…

排序个人总结

插入排序 思路&#xff1b;定义 i 和 j&#xff0c;默认 i 前面的数都是有序的&#xff0c;j 定义为 i 的前一个数&#xff0c;把 i 的值给tmp&#xff0c;tmp与j对应的值进行比较&#xff0c;如果arr[j] > tmp,将arr[j] (大的数前移一位)&#xff0c;如下图 代码&#xf…

【亲子英语】英语故事有声绘本分享

文章目录 一、视觉与听觉的双重盛宴二、语言学习的最佳伙伴三、亲子共读的温馨时光四、适用人群广泛&#xff0c;随时随地学习五、获取方式 在这个快速发展的时代&#xff0c;英语学习已经不再局限于课本和课堂。特别是对于活泼好动的孩子们来说&#xff0c;一种既有趣又高效的…

open-resty 服务安装jwt插件

作者&#xff1a;程序那点事儿 日期&#xff1a;2023/11/16 22:07 lua-resty-jwt 插件 如果想使用Lua识别用户令牌&#xff0c;我们需要引入lua-resty-jwt模块&#xff0c;是用于 ngx_lua 和 LuaJIT 的 Lua 实现库&#xff0c;在该模块能实现Jwt令牌生成、Jwt令牌校验。 下载…

9.25作业

手动实现队列 代码如下 MyQueue.h #ifndef MYQUEUE_H #define MYQUEUE_H #include <iostream> #include <cstring> using namespace std;class Queue{ private:char* data; //字符串数据int len; //当前数量int size; //最大容量int front; //头索引int …

uboot — uboot命令的使用

uboot的命令繁多&#xff0c;下文只对工作中常用到的命令进行记录&#xff0c;其余命令待用到时再查查资料也不迟 一、环境变量操作命令 1、printenv 打印环境变量 2、setenv 修改环境变量/新建环境变量 3、saveenv 保存环境变量/删除环境变量&#xff08;给环境变量赋空值…

巴特沃斯滤波器的MATLAB实现

一、引言 巴特沃斯滤波器&#xff08;Butterworth Filter&#xff09;&#xff0c;是滤波器的一种&#xff0c;其主要特点是通频带的频率响应曲线最平滑。这种滤波器最先由英国工程师斯蒂芬巴特沃斯(StephenButterworth)在1930年发表在英国《无线电工程》期刊的一篇论文中提出的…

基于vue框架的村务综合服务系统8p0l3(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;居民,村委,支部,公告信息,通讯录,重点户 开题报告内容 基于Vue框架的村务综合服务系统开题报告 一、引言 随着信息化时代的深入发展&#xff0c;农村社会治理模式正经历着深刻的变革。传统村务管理方式往往存在信息不对称、效率低下、…

【SpringBoot整合Redis测试Redis集群案例】

1、第一步&#xff0c;创建springboot项目&#xff0c;并导入依赖 如图&#xff0c;创建项目遇到的第一个问题就是&#xff0c;当type选择maven&#xff0c;jdk选择1.8时&#xff0c;java部分没办法选择1.8的版本&#xff0c;这怎么办呢&#xff1f; 原因&#xff1a;搜了一下…

【C++ Primer Plus习题】17.7

问题: 解答: #include <iostream> #include <vector> #include <string> #include <fstream> #include <algorithm>using namespace std;const int LIMIT 50;void ShowStr(const string& str); void GetStrs(ifstream& fin, vector<…

【多线程】面试高频考点!JUC常见类的详细总结,建议收藏!

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;多线程 / javaEE初阶 JUC是“Java Util Concurrency”的缩写&#xff0c;指的是Java并发工具包&#xff0c;它位于java.util.concurrent包及其子包中。JUC包提供了大量用于构建并发应用程序的工具和…

简历信息提取系统源码分享

简历信息提取检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

C++之stack 和 queue

目录 前言 1.stack的介绍和使用 1.1 stack的介绍 1.2 stack的使用 1.3 stack 的模拟 2. queue的介绍和使用 2.1 queue的介绍 2.2 queue的使用 2.3 queue的模拟 3.适配器 3.1 什么是适配器 3.2 STL标准库中stack和queue的底层结构 3.3 deque 的介绍&#xff08;了解&…

每日OJ题_牛客_ 腐烂的苹果_多源BFS_C++_Java

目录 牛客_腐烂的苹果&#xff08;多源 BFS&#xff09; 题目解析 C代码 Java代码 牛客_腐烂的苹果&#xff08;多源 BFS&#xff09; 腐烂的苹果_牛客题霸_牛客网 题目解析 多源 BFS 问题&#xff0c;固定套路&#xff0c;BFS学习 &#xff1a;Offer必备算法28_多源BFS_…

【C++算法】哈希表

哈希表介绍&#xff1a; 1.哈希表是什么&#xff1f; 存储数据的容器 2.哈希表有什么用&#xff1f; “快速”查找某个元素——O(N) 3.什么时候使用哈希表&#xff1f; 频繁的查找某一个数的时候&#xff0c;频繁也可以使用二分&#xff08;有序&#xff09; 4.怎么用哈希表&…

cadence多版本启动问题

一、问题描述 电脑上安装了 17.4 和16.6两个版本打开16.6时会弹出 **原因&#xff1a;**使用Allegro设计PCB时&#xff0c;当关闭软件后&#xff0c;再次打开Allegro软件&#xff0c;打开的文件为上一次操作过的.brd文件&#xff0c;这是Allegro软件安装的默认设置。 二、解…

单体项目中定时任务的实现-详细教程

单体项目中定时任务的实现 在企业开发中&#xff0c;遇到的项目无非就两种&#xff0c;单体项目和分布式项目 单体项目中实现定时任务有以下几种方式 1. 使用Timer实现定时任务&#xff08;不常用&#xff09; 1.1、JDK1.3推出的定时任务实现工具类java.util.Timer 1.2、API…

学习MRI处理过程中搜到的宝藏网站

今天浏览网页查到了一些宝藏网站&#xff0c;正好记录一下&#xff0c;后面搜到好东东再接着填充&#xff0c;方便查阅~ &#xff08;1&#xff09;牛人网站 这个网站是在搜集seed关键词时发现的&#xff0c;用pdf文档记录&#xff0c;可下载查阅&#xff0c;条理清晰&#xf…

Python | Leetcode Python题解之第433题最小基因变化

题目&#xff1a; 题解&#xff1a; class Solution:def minMutation(self, start: str, end: str, bank: List[str]) -> int:if start end:return 0def diffOne(s: str, t: str) -> bool:return sum(x ! y for x, y in zip(s, t)) 1m len(bank)adj [[] for _ in ra…

基于Node.js+Express+MySQL+VUE实现的在线电影视频点播网站管理系统的设计与实现

1. 引言 随着互联网技术的快速发展和普及&#xff0c;人们获取信息的方式发生了巨大变化&#xff0c;其中在线视频点播服务因其便捷性和多样性而受到广泛欢迎。在线电影视频点播网站作为这一领域的代表&#xff0c;不仅需要满足用户观看需求&#xff0c;同时也需为管理员提供高…