【JavaScript】DOM和事件简介和文档加载流程以及DOM查询(上)案例(附源码)

news2025/2/25 17:17:43

🐚作者简介:苏凉(专注于网络爬虫,数据分析,正在学习前端的路上)
🐳博客主页:苏凉.py的博客
🌐系列总专栏:web前端基础教程
👑名言警句:海阔凭鱼跃,天高任鸟飞。
📰要是觉得博主文章写的不错的话,还望大家三连支持一下呀!!!
👉关注✨点赞👍收藏📂

文章目录

    • 每日推荐
    • 什么是DOM?
    • 节点(Node)
    • 查找节点
    • 什么是事件?
    • 事件绑定
      • 在html节点中绑定
      • 在js中绑定
      • 常见的html事件
    • 文档的加载
      • 给window绑定onload事件
    • DOM查询
      • innerHTML 属性
      • 获取元素节点
      • 案例一
      • 案例二

每日推荐

给大家推荐一款神器。无论你是学生党还是上班族都可以使用,这里涵盖了面试题库,在线刷题,各个大厂的面试/笔试真题等。如果你还是学生,最重要的一点就是模拟面试功能,智能AI1v1面试,帮助你早日拿到大厂offer!点击链接即可直达!=>牛客网-找工作神器
在这里插入图片描述

什么是DOM?

JS中通过DOM来对HTML文档进行操作。只要理解了DOM就可以随心所欲的操作WEB页面。
DOM,全称Document Object Model文档对象模型。

  • 文档
    文档表示的就是整个的HTML网页文档对象
  • 对象
    表示将网页中的每一个部分都转换为了一个对象。
  • 模型
    使用模型来表示对象之间的关系,这样方便我们获取对象。
    DOM中的模型如图所示,我们只需要知道某一个节点即可找到任意其他节点。
    在这里插入图片描述

节点(Node)

节点,是构成我们网页的最基本的组成部分,网页中的每一个部分都可以称为是一个节点。比如: html标签、属性、文本、注释、整个文档等都是一个节点。虽然都是节点,但是实际上他们的具体类型是不同的。比如∶标签我们称为元素节点、属性称为属性节点、文本称为文本节点、文档称为文档节点。节点的类型不同,属性和方法也都不尽相同。

  • 文档节点:整个HTML文档
  • 元素节点:HTML文档中的HTML标签
  • 属性节点:元素的属性
  • 文本节点:HTML标签中的文本内容
    在这里插入图片描述

查找节点

浏览器已经为我们提供文档节点对象,这个对象是window属性可以在页面中直接使用,文档节点代表的是整个网页。即document
例子:

给按钮一个id属性

<button id="bt1">按钮</button>

通过id查找按钮

document.getElementById('bt1');

什么是事件?

事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间。JavaScript 与HTML之间的交互是通过事件实现的。对于Web应用来说,有下面这些代表性的事件:

  1. 点击某个元素
  2. 将鼠标移动至某个元素上方
  3. 按下键盘上某个键,等等。

事件绑定

在html节点中绑定

我们可以在事件对应的属性中设置一些js代码,这样当事件被触发时,这些代码将会执行。

<button id="bt1" onclick="alert('点我干啥?')">按钮</button>

这种写法我们称为结构和行为据合,不方便维护,不推荐使用。

在js中绑定

可以为按钮的对应事件绑定处理函数的形式来响应事件这样当事件被触发时,其对应的函数将会被调用。

<button id="bt1">按钮</button>
//通过文档对象查找按钮节点
var bt = document.getElementById('bt1');
//绑定单击事件
bt.onclick = function(){
   alert('点我干嘛?')
}

效果:
单击按钮之后弹出警告框
在这里插入图片描述

常见的html事件

事件说明
onchangeHTML 元素改变
ondblclick当用户双击HTML 元素
onclick用户点击 HTML 元素
onmouseover鼠标指针移动到指定的元素上时发生
onmouseout用户从一个 HTML 元素上移开鼠标时发生
onkeydown用户按下键盘按键
onload浏览器已完成页面的加载

更多html事件请看此文档说明!

文档的加载

在上面的例子中将script标签写在按钮页面下部是为了让页面加载好之后在执行js代码。
浏览器在加载一个页面时,是按照自上向下的顺序加载的,读取到一行就运行一行,如果将script标签写到页面的上边,在代码执行时,页面还没有加载。因此就无法执行相应事件。

那么当我们想吧js代码写在上方时,又怎样来实现同样的效果呢?

给window绑定onload事件

onload事件会在整个页面加载完成后执行

  • 该事件对应的响应函数将会在页面加载完成之后执行,这样可以确保我们的代码执行时所有的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>
    <script>
        window.onload = function(){
            var even = document.getElementById('bt1');
            even.onclick = function(){
                alert('点我干嘛??')
            }
        }
    </script>
</head>
<body>
    <button id="bt1">按钮</button>
</body>
</html>

DOM查询

innerHTML 属性

  • 获取元素内容最简单的方法是使用 innerHTML 属性。
  • innerHTML属性可用于获取或替换 HTML 元素的内容。
  • innerHTML属性可用于获取或改变任何 HTML 元素,包括 <html><body>

获取元素节点

  • 通过document对象调用
  1. getElementByld()
    通过id属性获取一个元素节点对象
  2. getElementsByTagName()
    使用该方法获取元素时返回的是一个类数组对象。
    通过标签名获取一组元素节点对象
  3. getElementsByName()
    使用该方法获取元素时返回的也是一个类数组对象。
    通过name属性获取一组元素节点对象
    注意:在获取input标签中的值时,因为没有结束标签,因此不能使用innerHTML来获取标签内容,需通过属性名来获取,即元素.属性名
    例子:元素.id元素.name元素.value
    注意:class属性不能采用这种方式,读取class属性时需要使用元素.className

案例一

实现效果:
在这里插入图片描述

源码:

<!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>
    <script>
        window.onload = function(){
            //为id=bt1的按钮绑定事件调用函数
            document.getElementById('bt1').onclick = function(){
                //获取id为li1的节点
                var li1 = document.getElementById('li1');
                alert(li1.innerHTML);
            }
            //为id=bt2的按钮绑定事件调用函数
            document.getElementById('bt2').onclick = function(){
                //获取所有li
                var lis = document.getElementsByTagName('li');
                for(var i = 0;i<lis.length;i++){
                    alert(lis[i].innerHTML)
                }
            }
            //为id=bt3的按钮绑定事件调用函数
            document.getElementById('bt3').onclick = function(){
                //获取name=gender的节点
                var genders = document.getElementsByName('gender')
                for(var i = 0;i<genders.length;i++){
                    alert(genders[i].value)
                }
                
            }
        }
    </script>
    <style>
        .d1{
            display: inline-block;
            margin-left: 100px;
            margin-top: 100px;
            background-color: lightblue;
        }
        .d1>ol>li{
            display: inline-block;
            background-color: antiquewhite;
        }
        .d2{
            display:inline-block;
            position:absolute;
            margin-left: 50px;
            margin-top: 100px;
            
        }
        .d2>button{
            display: block;
        }
    </style>
</head>
<body>
    <div class="d1">
        <p>端游列表</p>
        <ol>
            <li id="li1">英雄联盟</li>
            <li>QQ飞车</li>
            <li>魔兽争霸</li>
            <li>地下城</li>
        </ol>
        <p>手游列表</p>
        <ol>
            <li>原神</li>
            <li>王者荣耀</li>
            <li>qq飞车手游</li>
        </ol>
        <span>性别:</span><input type="radio" name="gender" value=""><input type="radio" name="gender" value="">
    </div>
    <div class="d2">
        <button id="bt1">获取id为li1的节点 </button>
        <button id="bt2">获取所有li</button>
        <button id="bt3">获取name=gender所有节点</button>
    </div>
</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>Document</title>
    <script>
        var imgArr = ["../img/1.jpg" ,"../img/2.jpg" ,"../img/3.jpg" ,"../img/4.jpg" ,"../img/5.jpg"]
        var index = 0;


        window.onload = function(){
        

        //给上一张按钮绑定单击事件
        document.getElementById('bt1').onclick = function(){
            //获取img节点
            var img1 = document.getElementsByTagName('img')[0];
            index --;
            if(index < 0){
                index = imgArr.length-1;
            }
            img1.src = imgArr[index];
            //获取p标签节点
            var p = document.getElementById('info');
            p.innerHTML = '总共'+imgArr.length+'张图片,当前第'+(index+1)+'张'
        }



        //给下一张按钮绑定单击事件
        document.getElementById('bt2').onclick = function(){
            //获取img节点
            var img2 = document.getElementsByTagName('img')[0];
            index ++;
            if(index > imgArr.length-1){
                index = 0;
            }
            img2.src = imgArr[index];
            //获取p标签节点
            var p = document.getElementById('info');
            p.innerHTML = '总共'+imgArr.length+'张图片,当前第'+(index+1)+'张'
        }
        }
        

    </script>
    <style>
        *{
            margin: 0%;
            padding: 0%;
        }
        #d1{

            padding: 10px;
            margin: 50px auto;
            width: 500px;
            background-color: wheat;
            text-align: center;
        }
        img{
            width: 500px;
            height: 300px;
        }
    </style>
</head>
<body>
    <div id="d1">
        <p id="info">总共5张图片,当前第1张</p>
        <img src="../img/1.jpg" alt="原神图片">
        <button id="bt1">上一张</button>
        <button id="bt2">下一张</button>
    </div>
</body>
</html>

这里我们实现了dom查询的一个小案例,下期继续更新DOM查询,欢迎订阅本专栏,持续更新中…

更多题库和知识点总结,面试技巧请看=>牛客网,快来和我一起刷题吧!

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

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

相关文章

自己的智能AI聊天机器人,可自定义头像,免费html源码分享,粘贴即用!

1.展示效果效果预览图&#xff1a;新增小功能&#xff1a;① 在原有的基础上加入了本地实时存档的功能&#xff0c;按照下面的步骤便可以随时在本地查看以往和智能AI所有的聊天记录哦&#xff01;再也不用担心关闭网页后先前的聊天内容全部消失啦&#xff01;PS&#xff1a;最新…

解决宝塔 Nginx 跨域问题Access-Control-Allow-Origin

何为跨域&#xff1f; 1、资源跳转&#xff1a; A链接、重定向、表单提交 2.资源嵌入&#xff1a; <link>、<script>、<img>、<frame>等dom标签&#xff0c;还有样式中background:url()、font-face()等文件外链 3.脚本请求&#xff1a; js发起的ajax请…

商城系统需求分析

文章目录一、引言1.1项目背景1.2 前期工作二、技术概述三、功能需求3.1 功能块划分3.2 功能块描述3.2.1 面向用户部分功能&#xff1a;3.2.2 后台管理部分功能&#xff1a;四、性能需求4.1 数据精确度4.2 适应性五、系统流程图5.1 顾客与管理员流程图如下5.2 订单处理流程说明六…

VUE动态切换皮肤 VUE动态切换背景图片 操作 / VUE 主题切换

上正文 使用&#xff1a;root &#xff0c;var&#xff08;&#xff09;函数实现 1. 创建皮肤或主题 css目录 一个公共主题文件 theme.css&#xff0c;一个main.js引入文件theme-all.css&#xff0c;一个单独的 主题样式文件 theme-12.css 2. 定义css文件中所要切换的主题的…

vue(绑定style属性)

以对象方式绑定style属性 <div id"app"> <!-- 在行内属性中书写样式 --> <div style"color:royalblue ; font-size: 48px;">黄绥睿真帅个鬼</div> <!-- 把行内属性改造成对象&#xff0c;以对象方式绑定style属性 外部增加{}&a…

【进阶】TS 中的 类型断言 和 泛型

类型断言 作用 : 手动指定值的具体类型 ( 缩写值的范围 ) 应用场景 1 获取 DOM 元素的时候指定具体元素 示例 : const box document.getElementById(img) console.log(box.src) // ts报错错误内容 : 解析 &#xff1a; 上述语法在 js 中可以直接使用, 但是 TS 中就不行…

vue 动态样式绑定 class/style

简介&#xff1a; 字符串写法&#xff1a;类名不确定&#xff0c;要动态获取 对象写法&#xff1a;要绑定多个样式&#xff0c;个数确定&#xff0c;名字确定&#xff0c;但不确定用不用。 数组写法&#xff1a;要绑定多个样式&#xff0c;个数不确定&#xff0c;名字不确定。…

HTML基础 - HTML表格

HTML基础 - HTML表格 1.无表头的表格 <table> <tr> <td> <table>标签代表的是表 <tr>标签代表的是行 <td>标签代表的是列 在html页面中的表格来着&#xff0c;就和excl的表格不一样喽&#xff0c;咱自己有自己的规则&#xff1a; 这就是…

这一次,彻底搞懂箭头函数

一、箭头函数的特点 1. 相比普通函数&#xff0c;箭头函数有更加简洁的语法。 普通函数 function add(num) {return num 10 }箭头函数 const add num > num 10;2. 箭头函数不绑定this&#xff0c;会捕获其所在上下文的this&#xff0c;作为自己的this。 这句话需要注意的…

若依(ruoyi)字典管理插件实现思路探究

一个UI表单的构成&#xff0c;避免不了下拉框&#xff0c;多选框等标签&#xff0c;在开发这些标签时&#xff0c;通常会请求后台接口获取字典值进行动态渲染。定制化开发虽然实现简单&#xff0c;但会产生大量重复工作&#xff0c;解决这类问题的思路有哪些&#xff1f;文章对…

chrome插件开发时跨域问题解决方案

这是一个没有套路的前端博主&#xff0c;热衷各种前端向的骚操作&#xff0c;经常想到哪就写到哪&#xff0c;如果有感兴趣的技术和前端效果可以留言&#xff5e;博主看到后会去代替大家踩坑的&#xff5e;接下来的几篇都是uni-app的小实战&#xff0c;有助于我们更好的去学习u…

Vue在HTML中如何使用

&#x1f440;Vue是什么 一套用于构建用户界面的渐进式JavaScript框架。 构建用户界面&#xff1a;数据变成界面渐进式&#xff1a;Vue可以自底向上逐层的应用&#x1f440;Vue如何使用 一、引入vue.js <script src"./js/vue.js"></script> 二、准备一个…

HBuilderX uni-app简单实现静态登录页面(实例)

本章用到......uni-app页面跳转uni.navigateTo方法、uni.navigateBack方法。uni-app简单实现邮箱验证码发送点击后读秒样式。登录账号、密码正则表达式验证等 适合刚入门的小伙伴&#xff0c;大佬就没必要看了 静态页面&#xff01;静态页面&#xff01;没有绑定后端数据接口…

拿来即用的前端登录页面(简洁清爽版)

1、使用bootstrap实现 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>登录</title><link rel"stylesheet" href"/bootstrap-3.3.7-dist/css/bootstrap.m…

vue项目根据不同环境动态配置接口请求ip及全局变量(vue环境变量配置)

在项目的开发过程中&#xff0c;我们常常会遇到根据不同的环境需要切换不同的ip的问题&#xff0c;例如在项目部署到测试服时需要将接口请求ip替换成测试服的ip,部署到正式服时又需要将接口请求ip替换成正式服对应的ip,有些公司还有预发环境等&#xff0c;这样在每次部署不同环…

Vue实战篇三十五:实现滑动拼图验证登录

系列文章目录 Vue基础篇一&#xff1a;编写第一个Vue程序 Vue基础篇二&#xff1a;Vue组件的核心概念 Vue基础篇三&#xff1a;Vue的计算属性与侦听器 Vue基础篇四&#xff1a;Vue的生命周期&#xff08;秒杀案例实战&#xff09; Vue基础篇五&#xff1a;Vue的指令 Vue基础篇…

Please set spring.main.web-application-type=reactive or remove spring-boot-starter-web dependency.

一、问题在启动springcloud的gateway模块的时候报错Please set spring.main.web-application-typereactive or remove spring-boot-starter-web dependency.二、问题产生的原因gateway组件中的 spring-boot-starter-webflux 和 springboot作为web项目启动必不可少的 spring-boo…

前端如何将静态页面部署到服务器,并可以通过公网ip访问。

问题描述 作为卑微的前端页面仔。在我们公司项目上线的时候&#xff0c;一般都是我们前端 npm run build&#xff0c;然后直接把打出来的dist包丢给后端&#xff0c;后端上传到服务器完成前端的部署。这个时候我就很好奇&#xff0c;页面是怎么上传到服务器的呢&#xff1f;上…

vue使用pinia (vue2/vue3)

pinia是什么&#xff1f;Pinia 是 Vue.js 的轻量级状态管理库 官方网站&#xff1a;Pinia 中文文档: 介绍 | Pinia 中文文档 pinia与vuex4 相同 是vue 官方 状态管理工具(作者是 Vue 核心团队成员&#xff09;是vue开发者工具支持pinia 不同 pinia相比vuex4&#xff0c…

云E办Springboot+vue——前端项目完整版(含源码)

一、项目简介 项目背景&#xff1a;受疫情的影响&#xff0c;许多企业由线上办公转为线下办公。随着线上办公的人数的增多&#xff0c;线上办公的优点逐步凸显&#xff1a;通过实现工作流程的自动化、节省企业办公费用、实现绿色办公&#xff0c;同时提升办公效率。 项目介绍…