JavaScript-----DOM元素

news2024/11/25 12:35:07

 目录

前言:

1. DOM介绍

2. 获取节点

3. 操作HTML内容

4. 监听事件

案例

5. 操作节点的标签属性

6. 操作样式

7. 创建、添加、删除节点


前言:

        在此之前我们要想去操作网页元素一般是去通过CSS选择器实现的,今天我们就学习JavaScript里面的DOM元素,通过DOM元素我们可以去选中并且对网页页面元素进行操作,这是一个很重要的内容,下面我会去详细讲解,一起来学习吧。

1. DOM介绍

DOM全称为 “Document Object Model”,文档对象模型,提供操作HTML文档的方法。(注:每个html文件在浏览器中都视为一篇文档,操作文档实际就是操作页面元素。)

当网页加载时,浏览器就会自动创建当前页面的文档对象模型(DOM)。在DOM中,文档的所有部分(例如元素、属性、文本等)都会被组织成一个树结构(类似于族谱),树中每一个分支的终点称为一个节点,每个节点都是一个对象。

2. 获取节点

DOM为我们提供了一个全局内置对象document,要操作HTML标签,我们可以调用document对象中的各种方法来获取页面中的标签(在js中我们可以称之为 元素 或者 节点):

根据CSS选择器来获取DOM元素

// 选择匹配的第一个元素
// 返回值:CSS选择器匹配的第一个元素。如果没有匹配到,则返回null。
document.querySelector('css选择器')
// 选择匹配的多个元素
// 返回值:CSS选择器匹配的NodeList对象集合  是一个伪数组
document.querySelectorAll('css选择器')

通过ID获取:document.getElementById()

通过class名获取:document.getElementsByClassName()

通过标签名获取:document.getElementsByTagName()  

注意: document.getElementById()这个获取到的是一个DOM元素,也就是标签元素,而document.getElementsByClassName()document.getElementsByTagName()  获取到的是一个HTMLCollection对象(是一个存放DOM元素的列表),如果要想获取到DOM元素,那么就可以从HTMLCollection列表拿出里面的DOM元素即可

看代码示例:

<body>
    <div class="fine">
        <div class="he">123</div>
        <div id="good" class="he">486</div>
    </div>
    <script>
        console.log(document.getElementById('good')); //获取id为good的标签元素
        console.log(document.getElementsByClassName('he')); 
        console.log(document.getElementsByClassName('he')[0]);
        console.log(document.getElementsByTagName('div'));

        console.log(document.querySelector('.fine .he'));//获取到第一个
        console.log(document.querySelectorAll('.fine .he')); //获取到满足条件CSS选择器的全部
    </script>
</body>

结果如下:

3. 操作HTML内容

节点.innerHTML : 读取或设置元素文本内容,可识别标签语法

节点.innerText : 读取或设置元素文本内容,不能识别标签语法

注意:当使用innerHTMLinnerText 对内容进行修改的时候要小心,修改了之后会把原来的全部内容给覆盖掉,包括标签文本等等……都会被覆盖

示例:

<body>
    <div class="fine">
        只因你太美 baby
        <div class="he">123</div>
        <div id="good" class="he">486</div>
    </div>
    <script>
        //获取数据
        console.log(document.getElementsByClassName('fine')[0].innerHTML);//(html)获取到里面的全部数据
        console.log(document.getElementsByClassName('fine')[0].innerText);//(text) 获取到里面的文本数据

        //修改数据
        document.getElementsByClassName('fine')[0].innerHTML='我家哥哥是最棒的!';
        console.log(document.getElementsByClassName('fine')[0].innerHTML);//重新获取里面的数据内容
    </script>
</body>

4. 监听事件

事件是达到某个事先设定的条件,自动触发的动作。例如点击了某个按钮、在文本框中输入文本、按下键盘上的某个按键、移动鼠标等等。我们可以使用 JavaScript中的监听事件来检测事件是否发生并执行某些特定的程序。

事件种类

事件描述
onclick点击鼠标左键时触发此事件
onmouseover当鼠标移动到某个元素上方时触发此事件
onmouseout当鼠标离开某个元素范围时触发此事件
onblur当前元素失去焦点时触发此事件
onfocus当某个元素获得焦点时触发此事件
onscroll当滚动浏览器的滚动条时触发此事件

执行方式

1. 直接在元素本身调用属性=函数

2. 在js代码里面获取到元素然后附加一个事件=执行函数

注意:这两张方式this的指向性不同,第一种this指向为window,第二种this指向是当前元素 

代码书写步骤

  • 获取事件源:document.getElementById(“box”);

  • 绑定事件: 事件源box.事件onclick = function(){ 事件驱动程序 };

 代码示例(以鼠标点击为例):

<body>
    <div class="kun">
        <p onclick="fun()">
            <span>迎面走来的你让我如此蠢蠢欲动</span>
        </p>
        <p>
            <span>这种感觉是我从未got the crash on you who you</span>
        </p>
    </div>
    <script>
        //第一种
       function fun(){
            console.log(this);
            console.log('坤坤点击了我');
       }
        //第二种
       document.getElementsByTagName('p')[1].onclick=function(){
            console.log(this);
            console.log('坤坤又点击了我');
       }
    </script>
</body>

案例

我们去浏览网页的时候,当如果滚轮向下滚动到一定距离的时候就会出现一个回到顶部的按键,按下我们就可以回到顶部,下面代码通过JavaScript去实现这个功能。

<!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>
        .back{
            border: 2px solid red;
            width: 100px;
            height: 100px;
            position: fixed;
            right: 0;
            text-align: center;
            bottom: 100px;
            line-height: 100px;
            display: none; 
            /* 默认不显示 */
        }
    </style>
</head>
<body>
    <!-- 创建一个锚点 -->
    <div id="top">这里是顶部</div>
    <!-- 这个是一个滚动的页面标签 -->
    <div style="height: 2000px;"></div>

    <div class="back">
        <a href="#top">回到顶部</a>
    </div>
    <script>
        // 执行的this指向对象是window
        window.onscroll=function(){
            let movey=document.documentElement.scrollTop; //获取到页面向下滚动的距离
            console.log(movey);  //打印移动的距离
            if (movey>=500){ //判断,如果向下滚动超过了500像素,就让锚点出现
                document.getElementsByClassName('back')[0].style.display='block';
            }
            else{
                document.getElementsByClassName('back')[0].style.display='none';
            }
        }
    </script>
</body>
</html>

 效果如下:

5. 操作节点的标签属性

直接使用 节点.属性 的方式。eg:console.log(节点.id); 节点.title = "新的title"。class名字不能 .class ,而是使用 .className 代替。

6. 操作样式

访问元素节点的style属性,获取样式对象;样式对象中包含CSS属性,使用点语法操作。

p.style.color = "white";
p.style.width = "300px";
p.style.fontSize = "20px";

如果css属性名包含连接符,使用JS访问时,一律去掉连接符,改为驼峰, font-size -> fontSize

使用 .className 可以来操作标签的类名,但是需要新加一个类名,或者去掉某个类名时,使用.className较为麻烦。所以推荐使用.classList` 来操作类名。

添加:节点.classList.add("类名")

移除:节点.classList.remove("类名")

切换(有则删,无则加):节点.classList.toggle("类名")

7. 创建、添加、删除节点

  • 创建节点:createElement 创建一个元素节点;

  • 添加节点:

    • appendChild(node) 元素最后添加一个子节点;

    • insertBefore(node,Enode) 在元素某个子节点之前添加新子节点,第一个参数为新节点,第二个参数为已存在的子节点。

  • 替换节点:replaceChild(node,Enode) 用新节点替换某个子节点,第一个参数为新节点,第二个参数为已存在的某个子节点。

  • 删除节点:removeChild(node) 删除元素的某个子节点。

看代码示例:

<body>
    <div class="amgin">
        <p>
            <span> 马格南</span>
        </p>
    </div>
    <script>
        //创建元素节点
        let p=document.createElement('button');
        let q=document.createElement('button');
        let x=document.createElement('div');
        //插入节点:元素最后添加一个子节点
        document.getElementsByClassName('amgin')[0].appendChild(p);
        //插入节点:在元素某个子节点之前添加新子节点
        document.getElementsByClassName('amgin')[0].insertBefore(q,document.querySelector('.amgin p'));

        //替换节点
        document.getElementsByClassName('amgin')[0].replaceChild(x,document.querySelector('.amgin p'));
        //删除节点
        document.getElementsByClassName('amgin')[0].removeChild(q);
    </script>
</body>

结果:

 好了,以上就是今天的全部内容了,我们下一期再见!

分享一张壁纸:

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

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

相关文章

bit、bin 、mcs文件区别

FPGA里面的可执行文件都涉及到 *.bit&#xff0c; *.mcs&#xff0c; *.bin 和 *.elf。 bit文件 bit 文件一般用于JTAG在线进行调试的时候&#xff0c;是把bit文件是烧写到FPGA中进行在线调试。 bin文件 bin 文件是二进制文件&#xff0c;按顺序只包含原始字节流&#xff0c…

74HC595

简介 74HC595 是一个 8 位串行输入、并行输出的位移缓存器&#xff0c;其中并行输出为三 态输出&#xff08;即高电平、低电平和高阻抗&#xff09; 15 和 1 到 7 脚 QA--QH&#xff1a;并行数据输出 9 脚 QH 非&#xff1a;串行数据输出 10 脚 SCLK 非&#xff08; MR&#…

【UE 材质】制作飘动的旗帜

效果 步骤 1. 首先在建模软件中创建一个平面&#xff0c;注意分段数一定要多 2. 在UE中创建一个材质&#xff0c;这里命名为“Mat_Flag” 打开“Mat_Flag”&#xff0c;先将旗帜纹理连接到基础颜色 先选中导入的模型然后点击根据选中的模型预览材质 创建如下节点可以看到此时模…

本地开发环境大小写不敏感引发的问题

推荐阅读 大小写敏感知多少[1] 文件大小写与文件系统有关&#xff0c;与操作系统无关。 血泪教训--拿到新移动硬盘该做的第一件事[2] MacOS 默认的文件系统APFS&#xff0c;如果没有手动更改&#xff0c;默认不区分大小写(可以在初始化时设置为大小写敏感)。 而公司测试/生产环…

AOSP和AAOS,向左走还是向右走?

Android Automotive OS&#xff08;AAOS&#xff09;和Android Open-Source Project&#xff08;AOSP&#xff09;之间存在很多混乱。这两个Android版本经常被混淆使用&#xff0c;但它们代表不同的平台和方法。为汽车In-Vehicle Infotainment&#xff08;IVI&#xff09;项目选…

2023CSP-S初赛复习整理

目录 逻辑运算常见运算运算规则运算优先级例题 进制转换十进制转二进制、八进制、十六进制二进制、八进制、十六进制转十进制例题 主定理编程语言概况具体分类 逻辑运算 常见运算 非&#xff1a; n o t not not 即 与&#xff1a; a n d and and 即 ∧ ∧ ∧ 或&#xf…

依赖项的处理与层的创建与注册

依赖项的处理与层的创建与注册 依赖项的处理与层的创建与注册 新问题什么是 layer?layer 的创建与注册 与函数同时创建和绑定单独上传 layer 再绑定函数(推荐) 真正的运行时依赖 注册包的约定与平台强关联的运行时 1. 云端安装依赖2. 本地构建 Amazon Linux 2 容器环境3. 利用…

Nginx__高级进阶篇

目录 Nginx Web服务器 Nginx Proxy服务器 Nginx 邮 件 Nginx Web服务器 Nginx Proxy服务器 代理原理 正向代理&#xff1a;内网客户机通过代理访问互联网。通常要设置代理服务器地址和端口。 反向代理&#xff1a;外网用户通过代理访问内网服务器。内…

解决VSCode下载速度特别慢

背景: 我们在vscode官网下载vocode的时候速度慢得离谱,而且下载会断开,这时候我们需要将下载镜像切换到国内&#xff01; 解决方法 我是用chrome浏览器&#xff0c;点击右上角的三个点按钮&#xff0c;点击下载内容。 如果你是用其他浏览器&#xff0c;可能使用其他方式跳…

“深入理解SpringMVC的注解驱动开发“

目录 引言1. SpringMVC的常用注解2. SpringMVC的参数传递3. SpringMVC的返回值4. SpringMVC页面跳转总结 引言 在现代的Web开发中&#xff0c;SpringMVC已经成为了一个非常流行和强大的框架。它提供了许多注解来简化开发过程&#xff0c;使得我们能够更加专注于业务逻辑的实现…

设置windos电脑开机自动启动chrome浏览器,并且打开指定网页

需求 web项目设置windos电脑开机自动启动chrome浏览器&#xff0c;打开指定网页地址&#xff0c;并设置为全屏显示 解决 使用windos的bat脚本&#xff0c;设置为开机自启动&#xff0c;代码如下 echo off cd /d %~dp0 title Chrome tasklist|find /i "chrome.exe"…

Hadoop的第二个核心组件:MapReduce框架第三节

Hadoop的第二个核心组件&#xff1a;MapReduce框架 九、MR程序运行的核心阶段的细节性知识1、MR程序在运行过程中&#xff0c;涉及到的阶段和作用2、MR程序运行的的第一个组件&#xff1a;InputFormat3、MR程序的Job提交流程的源码分析4、MR程序运行中Mapper组件的作用5、MR程序…

【IC设计】Chisel开发环境搭建

首先安装一个Ubuntu的虚拟机 然后给Ubuntu换个镜像&#xff0c;方便下载 注意换源后使用apt-get update更新下 安装vim&#xff08;可以不做&#xff09; 这里安装Vim是我感觉Ubuntu自带的vi编辑器似乎有问题&#xff0c;因为我按i进入【插入模式】并没有提示&#xff0c;所以…

气象监测设备中一般包括哪些设备?

气象监测设备是指用于测量和记录气象数据的设备&#xff0c;这些设备通常被安装在各种气象站上&#xff0c;用于监测对应的气象参数。 气象监测设备主要包括以下几种&#xff1a; 温湿度传感器&#xff1a;用于测量空气温度和湿度&#xff0c;是气象监测设备中的重要组成部分…

Linux命令200例:who用于显示当前登录到系统的用户信息

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0…

基于网络表示学习的 新闻推荐算法研究与系统实现

摘要 第1章绪论 新闻推荐通常是利用用户的阅读行为和习惯、阅读选择和爱好等信息,为 用户推荐新闻内容。新闻推荐能够减少用户在数量庞大数据信息中获取信息的 时间消耗,从而能够缓解“信息过载[7]”的难题。以文本为内容的新闻,和商品、 电影、短视频等推荐系统相比,新闻推…

vite搭建vue3项目

参考视频 1.使用npm搭建vite项目,会自动搭建vue3项目 npm create vitelatest yarn create vite2.手动搭建vue3项目 创建一个项目名称的文件夹执行命令&#xff1a;npm init -y 快速的创建一个默认的包信息安装vite: npm i vite -D -D开发环境的依赖 安装vue,现在默认是vue3.…

2023年最新 wechaty 框架开发微信机器人详细 API 教程说明(NodeJs 版本)

基本概述 wechaty 基础 在使用 wechaty 相关 api 之前&#xff0c;请大家先学习基础篇&#xff1a;如何使用 wechaty 框架开发微信机器人详细教程&#xff08;NodeJs 版本&#xff09; 设置 script 脚本执行 在 package.json 文件中&#xff0c;配置 "start": &qu…

OpenWrt的内核启动分析

u-boot从Flash分区中读取Linux内核到内存&#xff0c;然后跳转到内存&#xff08;某个地址&#xff09;执行Linux内核。Linux内核会进行一系列验证&#xff0c;根据设备树文件&#xff08;见下图openwrt/target/linux/realtek/dts-5.15/XXX.dts&#xff0c;&#xff09;注册相关…

gma 2 教程(二)数据操作:7.矢量数据操作简介

功能逻辑架构 gma矢量数据操作类主要包括数据资源&#xff08;DataSource&#xff09;、矢量图层&#xff08;Layer&#xff09;、矢量要素&#xff08;Feature&#xff09;&#xff08;与ogr一致&#xff0c;内部与ogr差异巨大&#xff09;&#xff0c;三者的示意图如下&#…