DOM树(上) -- 第七课

news2024/11/29 0:34:56

文章目录

  • 前言
  • 一、DOM是什么?
  • 二、基础用法
    • 1.DOM树
    • 2. 获取元素
      • 1. id
      • 2. 标签
      • 3. name
      • 4. HTMLS新增的获取的方法
        • 1. 根据类型获取
        • 2. 根据querySelector获取
    • 3. 事件基础
      • 1. 概述
      • 2. 事件三要素
      • 3. 操作元素内容
        • 1. 操作内容
        • 2. 操作属性
        • 3. 案例
      • 4. 操作元素样式
      • 5. 案例 -- 显示隐藏文本框内容
      • 4. 排他思想
  • 总结


前言

从本节开始我们就正式进入了javaScript的虚席了,首先需要了解的就是DOM


一、DOM是什么?

Web API是浏览器提供的一套操作浏览器功能和页面元素的接口。JavaScript语言由3部分组成,分别是ECMAScript、BOM和DOM,其中ECMAScript是JavaScript语言的核心,而Web API包括BOM和DOM两部分。

DOM(文档对象模型)是一种用于访问和操作HTML和XML文档的编程接口。它将文档表示为一个由节点组成的树形结构,每个节点表示文档中的一个元素、属性、文本等。

DOM提供了一组方法和属性,允许开发人员通过脚本语言(通常是JavaScript)来动态地访问和修改文档的内容、结构和样式。通过使用DOM,开发人员可以创建、删除、修改和移动文档中的元素和属性,以及对文档进行事件处理和动画效果的操作。

DOM的设计理念是将文档视为一个结构化的树,其中树的每个节点都是一个对象,具有自己的属性和方法。可以通过访问树的节点来获取和修改文档中的元素、属性和文本。

DOM具有跨平台、可扩展和易于使用的特点,是Web开发中常用的技术之一。通过使用DOM,开发人员可以实现动态的网页交互和用户界面设计,并能够创建复杂的Web应用程序。

二、基础用法

1.DOM树

DOM中将HTML文档视为树结构,被称之为文档树模型,把文档映射成树形结构,通过节点对象对其处理,处理的结果可以加入到当前的页面。请添加图片描述

  1. 文档(document):可以把一个页面当成一个文档
  2. 元素(element):页面中的所有标签都是元素
  3. 节点(node):网页中的所有内容,在文档树中都是节点(如:元素节点、属性节点、文本节点、注释节点等),在DOM中会把所有的节点都看作是对象,这些对象拥有自己的属性和方法

2. 获取元素

1. id

document.getElementByld(‘id’)方法,是由document对象提供的用于查找元素的方法,该方法返回的是拥有指定id的元素,如果没有找到指定id的元素则返回null,如果存在多个指定id的元素则返回undefined。

<div id="box">你好</div>
<script>
	var Obox = document.getElementByld('box');
    console.log(Obox);//结果为:<div id="box">你好
</script>

2. 标签

根据标签名获取元素的方式:可以通过document对象获取元素。

var id = document.getElementsByTagName('标签名');

3. name

document.getElementsByName()方法,是通过name属性来获取元素,一般用于获取表单元素。name属性的值不要求必须是唯一的,多个元素也可以有同样的名字,如表单中的单选框和复选框。

var name = document.getElementsByName('name名');

示例:在复选框中选择最喜欢的水果

<body>
	<p>请选择你最喜欢的水果(多选)</p>
	<label> <input type="checkbox"name="fruit"value="苹果">苹果</label>
	<label><input type="checkbox"name="fruit"value="香蕉">香蕉</label>
	<label><input type="checkbox"name="fruit"value="西瓜">西瓜</label>
	<script>
		var fruits = document.getElementsByName('fruit');//返回对象集合
        fruits[0].checked = true//将fruits中的第1个元素的checked属性值设置为true
	</script>
</body>

4. HTMLS新增的获取的方法

HTML5中为document对象新增了querySelector()、querySelectorAll()和getElementsByClassName()方法。注意:这三种方式在使用时需要考虑到浏览器的兼容性问题。

1. 根据类型获取

document.getElementsByClassName()方法,用于通过类名来获得某些元

<body>
	<span class="one">英语</span> <span class="two">数学</span>
    <span class="one">语文</span> <span class="two">物理</span>
<script>
	var Ospan1 = document.getElementsByClassName('one');
    var Ospan2 = document.getElementsByClassName('two');
    Ospan1[0].style.fontWeight ='bold';
    Ospan2[1].style.background ='red'</script>
</body> 
2. 根据querySelector获取

tips:标签名直接写即可,如果是id加#,类名加.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        var box = document.getElementById('box1');
        console.log(box);
    </script>
</head>
<body>
    <div id="box1" class="nav">first</div>
    <div id="box2">second</div>
    <p>请选择你最喜欢的水果(多选)</p>
	<label> <input type="checkbox"name="fruit"value="苹果">苹果</label>
	<label><input type="checkbox"name="fruit"value="香蕉">香蕉</label>
	<label><input type="checkbox"name="fruit"value="西瓜">西瓜</label>
    <script>
        // 1. 通过id获取 -- 只能获取一个元素或者标签
        var box = document.getElementById('box1');
        console.log(box);

        // 2. 通过标签进行获取 -- 可以获取多个标签
        var div = document.getElementsByTagName('div');
        console.log(div);

        // 3. 通过name进行获取
        var inp = document.getElementsByName('fruit');
        console.log(inp);
        
        // queryselector能欧根据标签名,类名,id进行获取,但是它只能获取一个元素,如果有多个,只能获取第一个
        var div = document.querySelector('div');
        var div = document.querySelector('#box1'); // id为box1的标签
        var div = document.querySelector('.nav'); // class为nav的标签
        console.log(div);
        
        // querySelectorAll -- 可以获取多个
        var fruit = document.querySelectorAll('input');
        console.log(fruit);
        
        // document.getElementsByClassName
        var nav = document.getElementsByClassName('nav')
        console.log(nav);
        
    </script>
</body>
</html>

3. 事件基础

1. 概述

事件是指可以被JavaScript侦测到的行为,是一种“触发-响应”的机制。这些行为指的就是页面的加载、鼠标单击页面、鼠标指针滑过某个区域等具体的动作,它对实现网页的交互效果起着重要的作用。

2. 事件三要素

事件三要素是指事件源、事件类型和事件处理程序这3部分。名词解释如下:

  1. 事件源:触发事件的元素(谁触发了事件)
  2. 事件类型:如 click 单击事件(触发了什么事件)
  3. 事件处理程序:事件触发后要执行的代码(函数形式),也称事件处理函数(触发事件以后要做什么)

3. 操作元素内容

1. 操作内容

在前面的内容中已经讲解了获取元素的几种方式,接下来将利用DOM提供的属性实现对元素内容的操作。常用的属性如下表所示:
请添加图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div>这是一个div标签</div>
    <ul>
        <li>1</li>
        <li>2</li>
    </ul>
    <script>
        var div = document.querySelector('div')

        // 如果只有一个标签,他们三者就是一样的
        console.log(div.innerHTML);
        console.log(div.innerText);
        console.log(div.textContent);


        var ul = document.querySelector('ul')

        console.log(ul.innerHTML); // ul标签中的所有内容,包括文本,标签,换行,空格
        console.log(ul.innerText); // ul标签中的所有文本,没有标签,换行,空格
        console.log(ul.textContent); // ul标签中的所有文本,换行,空格,没有标签
    </script>
</body>
</html>
2. 操作属性

在DOM中,HTML属性操作是指使用JavaScript来操作一个元素的HTML属性。一个元素包含很多的属性,例如,对于一个img图片元素来说,可以操作它的src、title属性等,或者对于input元素来说,可以操作它的disabled、checked、selected属性等。

3. 案例

目标:显示隐藏密码明文

案例分析:在登录页面,为了优化用户体验,方便用户进行密码输入。因此在设计密码框时,会有一个“眼睛”图片,充当按钮功能,单击可以切换按钮的状态,控制密码的显示和隐藏。实现步骤如下:

  1. 准备一个父盒子div
  2. 在父盒子中放入两个子元素,一个input元素和一个img元素
  3. 单击眼睛图片切换input的type值(text和password)
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .box {
            position: relative;
            width: 400px;
            border-bottom: 1px solid #ccc;
            margin: 100px auto;
        }

        .box input {
            width: 370px;
            height: 30px;
            border: 0;
            outline: none;
        }

        .box img {
            position: absolute;
            top: 2px;
            right: 2px;
            width: 24px;
        }
    </style>
</head>

<body>
    <div class="box">
        <input type="password" name="" id="pwd">
        <label for="">
            <img src="images/close.png" alt="" id="eye">
        </label>

    </div>
    <script>
        // 1. 获取元素
        var eye = document.getElementById('eye');
        var pwd = document.getElementById('pwd');
        // 2. 注册事件 处理程序
        var flag = 0;
        eye.onclick = function () {
            // 点击一次之后, flag 一定要变化
            if (flag == 0) {
                pwd.type = 'text';
                eye.src = 'images/open.png';
                flag = 1; // 赋值操作
            } else {
                pwd.type = 'password';
                eye.src = 'images/close.png';
                flag = 0;
            }

        }
    </script>
</body>
</html>

4. 操作元素样式

操作元素样式的两种方式:一种是操作style属性,另一种是操作className属性。

  1. 操作style属性

    1. 元素对象的样式,可以直接通过“元素对象.style.样式属性名”的方式操作。样式属性名对应CSS样式名,但需要去掉CSS样式名里的半字线“-”,并将半字线后面的英文的首字母大写。请添加图片描述
      案例展示
<div id="box"></div>
<script>
	var ele = document.querySelector('#box');//获取元素对象
    ele.style.width ='100px';
    ele.style.height ='100px';
    ele.style.transform ='rotate(7deg)'// 上述3行代码相当于在CSS中添加以下样式:
	// box(width:100px;height:100px;transform:rotate(7deg);
</script>
  1. 操作className属性
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box{
            width: 400px;
            height: 400px;
            background-color: aqua;
            margin: 100px auto;
        }
    </style>
</head>
<body>
    <div>点击一下</div>
    <script>
        var div = document.querySelector('div');
        div.onclick = function(){
            div.className = 'box'
        }
    </script>
</body>
</html>

5. 案例 – 显示隐藏文本框内容

案例分析:本案例需要为一个文本框添加提示文本。当单击文本框时,里面的默认提示文字会隐藏,鼠标指针离开文本框,里面的文字会显示出来。藏

实现步骤如下:

  1. 为元素绑定获取文本框焦点事件onfocus和失去焦点事件onblur
  2. 如果获取焦点时,需要判断表单里面的内容是否为默认文字;如果是默认文字,就清空表单内容
  3. 如果失去焦点,需要判断表单内容是否为空;如果为空,则表单里边的内容改为默认文字
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <input type="text" value="请输入" style="color: #999;">
    <script>
        var inp = document.querySelector('input');
        // onfocus获取鼠标焦点
        inp.onfocus = function(){
            if(this.value == '请输入'){
                this.value = '';
            }
        }
        // onblur失去焦点
        inp.onblur = function(){
            if(this.value == ''){
                this.value = '请输入';
            }
        }
    </script>
</body>
</html>

4. 排他思想

在DOM(Document Object Model)中,排他思想可以理解为对元素的唯一性和独立性的重视。DOM是一种用于表示和操作HTML、XML等文档的编程接口,它将文档抽象成一个树状结构,每个元素都是DOM树的一个节点。

在DOM中,每个节点都有一个唯一的父节点,并且在同一级别下的子节点是互斥的,即同一级别下的节点不能重复。这种排他性确保了节点之间的关系和层次结构的准确性。例如,一个元素节点不能是其它元素节点的子节点,一个节点只能拥有一个父节点。

此外,DOM还强调每个节点的独立性。每个节点都有自己的属性、方法和事件,可以独立地进行操作和修改。这种独立性使得开发者可以对DOM树进行灵活的操作和控制,而不需要依赖其他节点的状态。

总之,DOM中的排他思想体现在对节点的唯一性和独立性的重视,通过这种排他思想,DOM提供了一种可靠和灵活的方式来操作和控制文档的结构和内容。

案例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button>按钮1</button>
    <button>按钮2</button>
    <button>按钮3</button>
    <button>按钮4</button>
    <script>
        var btns = document.querySelectorAll('button');
        // 将所有的时间设置第一个点击事件
        for(var i = 0;i<btns.length;i++){
            btns[i].onclick = function(){
                // 通过for循环使得所有的for循环的背景颜色为空
                for(var j=0;j<btns.length;j++){
                    btns[j].style.backgroundColor = '';
                };
                // 排他思想,先排除其他的,在添加自己的
                this.style.backgroundColor = 'skyblue';
            };
        }

        // 传统的实现方式太过麻烦
        // var btns = document.querySelectorAll('button');
        // console.log(btns);
        
        // btns[0].onclick = function(){
        //     console.log(1);
        //     this.style.backgroundColor = 'blue';
        // }
        // btns[1].onclick = function(){
        //     console.log(2);
        //     this.style.backgroundColor = 'blue';
        // }
        // btns[2].onclick = function(){
        //     console.log(3);
        //     this.style.backgroundColor = 'blue';
        // }
        // btns[3].onclick = function(){
        //     console.log(4);
        //     this.style.backgroundColor = 'blue';
        // }
    </script>
</body>
</html>

总结

关于DOM的知识点较多,因此我们分两节来进行讲述,如有需要请点击跳转值第二部分!

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

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

相关文章

【JDK动态代理】JDK动态代理:为何只能代理接口和接口实现类

在Java开发中&#xff0c;JDK动态代理是一种非常有用的技术&#xff0c;它允许开发者在不修改目标类代码的情况下&#xff0c;为目标类添加额外的功能。然而&#xff0c;JDK动态代理的使用有一些限制&#xff0c;特别是它只能代理接口和接口实现类。本文将深入探讨这一限制的原…

​IAR全面支持国科环宇AS32X系列RISC-V车规MCU

全球领先的嵌入式系统开发软件解决方案供应商IAR与北京国科环宇科技股份有限公司&#xff08;以下简称”国科环宇”&#xff09;联合宣布&#xff0c;最新版本IAR Embedded Workbench for RISC-V将全面支持国科环宇AS32X系列RISC-V MCU&#xff0c;双方将共同助力中国汽车行业开…

云原生(四十一) | 阿里云ECS服务器介绍

文章目录 阿里云ECS服务器介绍 一、云计算概述 二、什么是公有云 三、公有云优缺点 1、优点 2、缺点 四、公有云品牌 五、市场占有率 六、阿里云ECS概述 七、阿里云ECS特点 阿里云ECS服务器介绍 一、云计算概述 云计算是一种按使用量付费的模式&#xff0c;这种模式…

捕获Net-NTLM HASH 实验

1. Responder监听 sudo ./Responder.py -I eth0 -wv2. 触发NTLM请求 0x01. LLMNR && NBNS协议 winR : //asdasdasd0x02. 打印机漏洞 krbrelayx下的printerbug.py&#xff1a; 注意&#xff0c;这个凭据不是DC的&#xff0c;只要是个域用户都可以。后面是攻击目标&…

Linux中的进程间通信之管道

管道 管道是Unix中最古老的进程间通信的形式。 我们把从一个进程连接到另一个进程的一个数据流称为一个“管道” 匿名管道 #include <unistd.h> 功能:创建一无名管道 原型 int pipe(int fd[2]); 参数 fd&#xff1a;文件描述符数组,其中fd[0]表示读端, fd[1]表示写端 …

p2p、分布式,区块链笔记: Libp2p分散打孔 2022 IEEE 第 42 届分布式计算系统国际会议研讨会 (ICDCSW)

Decentralized Hole Punching 我们提出了一种内置于对等网络库 libp2p [1] 中的去中心化打洞机制。打洞对于对等网络至关重要&#xff0c;它使每个参与者能够直接与任何其他参与者通信&#xff0c;尽管被防火墙和 NAT 隔开。去中心化的 libp2p 打洞协议利用了类似于 STUN&…

Vivado - BD(差分时钟、简单分频、RESET、KEY)

目录 1. 简介 1.1 要点 1.2 buffer 介绍 2. vivado 工程 2.1 Block Design 2.2 IBUFDS 2.3 BUFGCE_DIV 2.4 Processor System Reset 2.5 key_mod 2.6 led_drv 3. 编译与调试 3.1 XDC 3.2 Debug 4. 总结 1. 简介 1.1 要点 了解 Utility Buffer v2.2 中的 Buffer…

关于HTML 案例_个人简历展示01

案例效果展示 代码 <!DOCTYPE html> <lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>个人简历信息</title> </he…

C语言高阶【1】--动态内存管理【1】(可以灵活的申请和使用内存,它不香吗?)

本章概述 为什么要有动态内存分配&#xff1f;malloc函数和free函数calloc函数和realloc函数常见的动态内存的错误彩蛋时刻&#xff01;&#xff01;&#xff01; 为什么要有动态内存分配&#xff1f; 情况描述&#xff1a;当我们创建一个变量时&#xff0c;比如&#xff0c;i…

《中安未来护照阅读器 —— 机场高效通行的智慧之选》

在机场&#xff0c;高效与准确的旅客信息处理至关重要。中安未来护照阅读器&#xff0c;为机场带来全新的智能化体验。它能够快速准确地读取护照信息&#xff0c;自动识别多种证件类型&#xff0c;极大提高了值机、安检等环节的效率。无论是繁忙的国际航站楼&#xff0c;还是国…

51单片机的串口

目录 一、串口的介绍 1、硬件电路 二、51单片机的UART 1、串口参数及时序图 2、串口模式图 3、串口和中断系统结构图 4、串口相关寄存器 三、串口向电脑发送数据 1、通过STC-ISP软件 四、电脑通过串口控制LED 1、主函数 2、 UART串口通信模块 一、串口的介绍 串口是一…

倒排索引是什么

倒排索引 简单了解&#xff1a; 什么是正向索引? 基于文档id创建索引。查询词条时必须先找到文档&#xff0c;而后判断是否包含词条 什么是倒排索引? 对文档内容分词&#xff0c;对词条创建索引&#xff0c;并记录词条所在文档的信息。查询时先根据词条查询到文档id&#…

C++和OpenGL实现3D游戏编程【连载13】——多重纹理混合详解

🔥C++和OpenGL实现3D游戏编程【目录】 1、本节要实现的内容 前面说过纹理贴图能够大幅提升游戏画面质量,但纹理贴图是没有叠加的。在一些游戏场景中,要求将非常不同的多个纹理(如泥泞的褐色地面、绿草植密布的地面、碎石遍布的地面)叠加(混合)起来显示,实现纹理间能…

WPS(金山文档)与金蝶云星空通过HTTP实现连接

WPS(金山文档)通过HTTP与金蝶云星空实现数据互通 该方式不需要通过金蝶SDK webapi官方文档地址&#xff1a;https://vip.kingdee.com/article/407944297573586944?langzh-CN&productLineId1&isKnowledge2 一、两种方式 airscript脚本发送http请求和PY脚本编辑器发送…

SCoRe: 通过强化学习教导大语言模型进行自我纠错

大语言模型(LLMs)在推理任务中,如数学问题求解和编程,已经展现出了优秀的性能。尽管它们能力强大,但在实现能够通过计算和交互来改进其回答的算法方面仍然面临挑战。现有的自我纠错方法要么依赖于提示工程,要么需要使用额外的模型进行微调,但这些方法都有局限性,往往无法产生有…

Java项目实战II基于Java+Spring Boot+MySQL的海滨体育馆管理系统的设计与实现(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者 一、前言 随着健康意识的提升和体育运动的普及&#xff0c;海滨体育馆作为集休闲、健身、娱乐于一体的综合性场…

MongoDB伪分布式部署(mac M2)

1. 序言 本博客是上一博客的进阶版&#xff1a;mac M2安装单机版 MongoDB 7.x&#xff0c;上一博客可以看做是单机、单节点部署MongoDB本博客将介绍单机、多服务部署MongoDB&#xff0c;实际就是伪分布式部署 2. 副本集(Replica Set)方式部署 2.1 什么是副本集&#xff1f; …

DNS与ICMP

一、DNS 在TCP/IP协议中&#xff0c;要用IP地址和端口号来连接服务器&#xff0c;但是直接输入数字用户体验感不好&#xff0c;所以就发明了主机号&#xff08;字符串&#xff09;&#xff0c;用host文件作主机名与IP的映射关系储存。 随着数量的增多&#xff0c;手动管理太麻…

【机器学习】集成学习——提升模型准确度的秘密武器

【机器学习】集成学习——提升模型准确度的秘密武器 1. 引言 集成学习&#xff08;Ensemble Learning&#xff09;是一种通过结合多个弱模型来提升整体预测准确性的技术。通过将多个模型的预测结果进行组合&#xff0c;集成学习在复杂任务中展现了极强的泛化能力。本文将探讨…

基于微信的乐室预约小程序+ssm(lw+演示+源码+运行)

摘 要 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用java语言技术和mysql数据库来完成对系统的设计。整个…