三、JS03 DOM 操作

news2024/12/26 11:58:02

三、DOM 操作

3.1 JavaScript DOM 操作

DOM (Document Object Model) 为文档对象模型,是 HTML 和 XML 文档的编程接口

DOM 提供了对整个文档的访问模型,将文档作为一个树形结构

树的每个节点表示了一个 HTML 标签或标签内的文本

3.1.1 DOM 操作分类

使用 JavaScript 操作 DOM 时分为三个方面:DOM core(DOM 核心操作)、HTML-DOM 和 CSS-DOM,开发者可通过这些操作实现动态地增加、删除、修改数据

1、DOM core(DOM 核心操作)

  • HTML core 定义了一套标准的针对任何结构化文档的对象
  • getElementById()、getElementsByTagName() 等方法都是 DOM core 的组成部分

2、HTML-DOM

  • HTML-DOM 提供了一些更简单的标记描述各种 HTML 元素的属性
  • 获取 DOM 模型中的某些对象,既可以使用 DOM core 实现,也可以使用 HTML-DOM 实现
  • 相对于 DOM Core 获取对象、属性而言,HTML-DOM 的代码通常较为简短
  • HTML-DOM的应用范围没有 DOM core 广泛

3、CSS-DOM

  • CSS-DOM 是针对 CSS 的操作
  • CSS-DOM 技术的主要作用是获取和设置 style 对象的各种属性

3.1.2 节点和节点主键的关系

节点可以理解为 HTML 文档中每个标签或者元素

  • 整个文档就是一个文档节点
  • 每个 HTML 标签就是一个元素节点
  • 包含在 HTML 元素中的文本是文本节点
  • 每个 HTML 属性就是一个属性节点
  • 注释属于注释节点

一个 HTML 文档是由各个不同的节点组成,下面示例展示了 HTML 文档

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>DOM 节点</title>
</head>
<body>
  <h1>标题</h1>
  <p>DOM 应用</p>
  <ul>
    <li>列表1</li>
    <li>列表2</li>
  </ul>
</body>
</html>

以上节点的结构层次关系图

document-文档
根节点-HTML
head-标签
body-标签
meat-标签
title-标签
文本-DOM节点
h1-标签
p-标签
ul-标签
文本-标题
文本-DOM应用
li-标签1
li-标签2
文本-列表1
文本-列表2
  • 以上可以清晰的看出一个文档节点被抽象为一个 DOM 树的结果
  • 通过 DOM 树可以方便后续对 DOM 树中的节点进行操作

使用 父节点(parent)、子节点(child)、兄弟节点(sibling)等术语来描述节点的层次关系

  • 父节点拥有子节点,同级的子节点被称为同胞或兄弟节点
  • 在以上 DOM 树中,顶部节点被称为 根(root)、 节点。
  • 每个节点都有父节点,除了根节点,如、 的父节点都是 节点
  • “DOM 节点” 的父节点是
  • 一个节点可以拥有任意数量的子节点,如 节点的子节点有
    • 兄弟节点是拥有相同父元素的节点。例如,两个
    • 就是兄弟节点,它们的父节点均为
      • 节点

    3.1.3 节点信息

    1、每个节点都拥有包含节点某些信息的属性

    • nodeName(节点名称)
    • nodeValue(节点值)
    • nodeType(节点类型)

    2、nodeName 属性含有某个节点的名称

    • 元素节点的 nodeName 是标签名称
    • 属性节点的 nodeName 是属性名称
    • 文本节点的 nodeName 永远是 #text
    • 文档节点的 nodeName 永远是 #document

    3、nodeValue 属性包含文本

    • 属性节点的 nodeValue 属性包含属性值
    • nodeValue 属性对于文档节点和元素是不可用的

    4、nodeType 属性可返回节点的类型

    • 重要的节点类型
    元素类型节点类型
    元素 element1
    属性 attr2
    文本 text3
    注释 comments8
    文档 document9

    3.1.4 访问节点

    使用 DOM core 访问 HTML 文档的节点主要有两种方式

    1、使用 getElement 系列方法访问指定节点

    2、根据节点的层次关系访问

    1、使用 getElement 系列方法访问指定节点

    方法名描述
    getElementById()返回按 id 属性查找的第一个对象的引用
    getElementByName()返回按带有指定名称 name 查找的对象的集合
    一个文档中可能会有多个同名节点,因此返回的是元素数组
    getElementByTagName()返回带有指定标签名 TagName 查找的对象的集合

    2、根据层次关系访问节点

    • 根据层次关系访问节点,可以遵循文档的结构
    • 在文档的局部进行 “短距离地查找元素”
    • 节点属性
    属性名称描述
    parentNode返回节点的父节点
    childNodes返回子节点集合,childNodes[i]
    firstChild返回节点的第一个子节点,最普遍的用法是访问该元素的文本节点
    lastChild返回节点的最后一个子节点
    nextSibling下一个节点
    previousSibling上一个节点
    • 如果你的标签之间存在空格或换行,那么这些空格和换行也算作一个节点
    • 例如,输出下面的 ul 标签内有几个子节点
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>判断节点</title>
    </head>
    <body>
    <ul>
      <li></li>
      <li></li>
      <li></li>
    </ul>
    <script type="text/javascript">
      //获取 ul 节点
      var obj=document.getElementsByTagName("ul")[0];
      //输出 ul 内有几个子节点
      alert(obj.childNodes.length);
    </script>
    </body>
    </html>
    
    • 运行结果

    image-20230413200009255

    • 从上面的结果可以看出,ul 标签内只有 3 对 li 标签,但是输出结果却是 7 ,这是因为,ul 标签内的空行也被认为是一个节点,所以才会显示 7
    • javaScript 内提供一组可兼容不同浏览器的 element 属性,可以消除这种因空行、换行等出现的无法准确访问到节点的情况
    • element 属性只会访问到标签元素
    • element 属性
    属性名称描述
    firstElementChild返回节点的第一个子节点
    lastElementChild返回节点的最后一个子节点
    nextElementSibling下一个节点
    previousElementSibling上一个节点

    3.2 操作节点

    在网页开发中,如果想动态地改变网页内容,需要对网页中的节点进行操作

    主要是对节点属性、节点、节点样式进行操作

    3.2.1 操作节点的属性

    HTML DOM 操作提供了获取及改变节点属性值的标准方法

    • getAttribute( “属性名” ) :用来获取属性的值
    • setAttribute( “属性名”,“属性值” ) :用来设置属性的值
    • 当使用 getAttribute() 方法读取属性值时,如果属性不存在,则返回 null

    3.2.2 创建或插入节点

    • 使用 JavaScript 操作 DOM 有很多方法可以创建或增加一个新节点,主要方法如下
    • 创建节点
    名称描述
    createElement( tagName )创建一个标签名为 tagName 的新元素节点
    A.appendChild(B)把 B 节点追加到 A 节点的子节点的末尾,将 B 节点作为最后一个子元素添加到A元素
    insertBefore(A,B)把 A 节点插入到 B 节点之前
    cloneNode(deep)复制某个指定的节点
    • insertBefore(A,B) 中有两个参数
      • A 是必选项,表示插入的节点
      • B 是可选项,表示新节点被插入 B 节点的前面
    • cloneNode(deep) 中的参数为布尔值
      • 若 deep 值为 true,则复制该节点及该节点的所有子节点
      • 若 deep 值为 false,则只复制该节点和其属性

    3.2.3 删除和替换节点

    删除和替换节点的方法

    名称描述
    removeChild(node)删除元素内指定的子元素 node
    replaceChild(newNode,oldNode)用其他的节点替换指定的节点
    • 方法 replaceChild(newNode,oldNode) 有两个参数
      • newNode 是替换的新节点
      • oldNode 是要被替换的节点

    3.2.4 操作节点样式

    通过获取节点,通过改变节点的样式属性,可以实现各种动态效果

    有两种方式可以动态地改变样式属性

    1、使用样式的 style 属性

    2、使用样式的 className 属性

    1、style 属性

    • style 是一个对象,代表一个单独的样式声明
    • 可以通过应用样式的文档或元素访问 style 对象
    • 使用 style 属性改变样式的语法 如下
    HTML元素.style.样式属性="值";
    
    • 例如:将一个id 为 titles 的 div 字体改变为红色,字体大小改为 13px
    document.getElementById("titles").style.color="#FF0000";
    document.getElementById("titles").style.fontSize="25px";
    
    • 上面代码中,CSS 中设置字体属性为 font-size,在 JavaScript 中则是 fontSize
    • 因为在 JavaScript中 “-” 代表减号,因此,如果 CSS 的属性有 “-”,则要省去,并且 “-” 后的字母要大写

    2、className 属性

    • className 属性可设置或返回元素的 class 样式
    • 语法如下
    HTML.元素.className="样式名称";
    
    • 示例
    //获取属性值:
    HTMLElementObject.className
    //设置属性值:
    HTMLElementObject.className="classname"
    

    3.2.5 获取元素样式

    • JavaScript 中可以使用 style 属性获取样式的属性值,语法如下
    HTML元素.style.样式属性
    
    • 但是上面这种方法存在一定的缺陷,它只能获取行内样式的属性值,无法获取内部样式表或外部样式表中的属性值
    • 微软为每个元素提供了一个 currentStyle 对象,它包含所有元素的 style 对象的特性和任何违背覆盖的 CSS 规则的 style属性
    • currentStyle 对象语法如下
    HTML元素.currentStyle.样式属性
    
    • currentStyle 可以获取样式属性的值,但是只局限于 IE 浏览器,其他浏览器无法获取样式的属性值
    • DOM 提供了一个 getComputedStyle() 方法,此方法接收两个参数,需要获取样式的属性值
    • 语法格式如下
    document.defaultView.getComputedStyle(元素,null).属性
    
    • defaultView:获取文档的窗口对象
    • getComputedStyle:方法用于获取指定元素的 CSS 样式

    象语法如下**

    HTML元素.currentStyle.样式属性
    
    • currentStyle 可以获取样式属性的值,但是只局限于 IE 浏览器,其他浏览器无法获取样式的属性值
    • DOM 提供了一个 getComputedStyle() 方法,此方法接收两个参数,需要获取样式的属性值
    • 语法格式如下
    document.defaultView.getComputedStyle(元素,null).属性
    
    • defaultView:获取文档的窗口对象
    • getComputedStyle:方法用于获取指定元素的 CSS 样式

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

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

    相关文章

    SSM整合————单表操作基础版

    一、创建数据库&#xff1a; 1. 创建一个 web 项目&#xff0c;并部署到 tomcat 服务器中测试项目 是否能够正常加载并访问首页。 2. 完善项目的结构并导入 SSM 相关的jar包 3.创建SSM框架对应的配置文件 springMVC配置文件&#xff1a;1.扫描controller&#xff1b;2.配置视图…

    ERROR org.springframework.web.context.ContextLoader

    项目启动时报错&#xff1a; ERROR org.springframework.web.context.ContextLoader - Context initialization failed java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotationUtils.clearCache() 原因分析 这个错误的原因可能是因为 Spring 的不同…

    VGG网络简介

    1. 背景 VGG是常见的用于大型图片识别的极深度卷积网络&#xff0c; 这里主要介绍VGG网络预测在ImageNet数据集上的训练及预测。 2. ImageNet图像数据集简介 ImageNet包含了145W张224*224像素的三通道彩色图像数据集&#xff0c;图像划分为1000个种类。其中训练集130W张&…

    Contest3070 - 计科2101~2104算法设计与分析上机作业05

    问题 A: 最小平均等待时间 题目描述 有n个顾客同时在等待一项服务&#xff0c;顾客i需要的服务时间为ti&#xff0c;1≤i≤n。要安排一个服务次序使得平均等待时间最小&#xff08;平均等待时间是n个顾客等待服务时间的总和除以n&#xff09;。请编写算法&#xff0c;计算最小…

    大文件上传接口响应超时

    背景 开发了一个内容管理发布系统&#xff0c;在后台发布内容信息时&#xff0c;上传了一个较大的视频&#xff08;较大文件≥200M&#xff09;&#xff0c;以往未上传过如此大文件&#xff0c;然后出现报错 Status Code 413 问题&处理过程 1. status code&#xff1a;4…

    如何在Linux使用 chattr 命令更改文件或目录的扩展属性?

    在 Linux 操作系统中&#xff0c;chattr 命令用于更改文件或目录的扩展属性&#xff0c;包括可写性、可执行性和删除性等。本文将介绍 chattr 命令的使用方法以及常见的参数。 1. chattr 命令的基本语法 chattr 命令的基本语法如下&#xff1a; chattr [选项] [文件或目录]选…

    论文阅读---《人类活动识别的准周期时间序列聚类》

    论文地址&#xff1a;Quasi-Periodic Time Series Clustering for Human Activity Recognition | SpringerLink 相空间知识概念&#xff1a;相空间相关概念以及轨迹生成_末世灯光的博客-CSDN博客 摘要&#xff1a; 本文利用移动加速度计对时间序列中的周期信号进行分析&…

    [python][学习]turtle.circle()函数

    turtle.circle()函数 定义&#xff1a;turtle.circle(radius, extentNone) 作用&#xff1a;根据半径radius绘制extent角度的弧形 参数&#xff1a; radius &#xff1a;弧形半径 当radius值为正数时&#xff0c;圆心在…

    斯坦福最新AI报告发布,12张图看懂AI现状

    最近&#xff0c;斯坦福人工智能研究所&#xff08;HAI&#xff09;发布了2023年AI指数报告&#xff0c;提供了AI领域当前技术成就、政策趋势、经济影响等多方面的最新情况。 今天我们将报告最重要的12个结论精简出来&#xff0c;分享给大家。 ▍AI大模型不只是大这么简单 在…

    JavaEE-轻松了解网络原理之TCP协议

    目录 TCP协议TCP协议数据格式TCP原理确认应答超时重传连接管理三次握手四次挥手 滑动窗口流量控制拥塞控制延迟应答捎带应答面向字节流异常问题 TCP协议 TCP&#xff0c;即Transmission Control Protocol&#xff0c;传输控制协议. TCP协议数据格式 16位源端口号与16位目的端…

    【工作小札】利用动态数据源实现Sass的一种思路(内含完整代码示例)

    文章目录 1 楔子2 分析3 代码实现3.1 管理库关键库表设计3.2 租户库关键库表设计3.3 新建一个SpringBootWeb项目3.4 添加maven依赖3.5 创建初始化数据库工具类3.6 创建动态数据源配置类3.7 创建登录代码3.8 创建数据源元数据服务类3.9 创建saas服务基础父类 4 示例演示4.1 下载…

    MultiHeadAttention多头注意力机制的原理

    MultiHeadAttention多头注意力作为Transformer的核心组件&#xff0c;其主要由多组自注意力组合构成。 1. self-Attention自注意力机制 在NLP任务中&#xff0c;自注意力能够根据上下文词来重新构建目标词的表示&#xff0c;其之所以被称之为注意力&#xff0c;在于从上下文词…

    【Spring6】| Spring6集成MyBatis3.5

    目录 一&#xff1a;Spring6集成MyBatis3.5 第一步&#xff1a;准备数据库表 第二步&#xff1a;IDEA中创建一个模块&#xff0c;并引入依赖 第三步&#xff1a;基于三层架构实现&#xff0c;所以提前创建好所有的包 第四步&#xff1a;编写pojo 第五步&#xff1a;编写m…

    【Redis数据库】异地公网远程登录连接Redis教程

    文章目录 1. Linux(centos8)安装redis数据库2. 配置redis数据库3. 内网穿透3.1 安装cpolar内网穿透3.2 创建隧道映射本地端口 4. 配置固定TCP端口地址4.1 保留一个固定tcp地址4.2 配置固定TCP地址4.3 使用固定的tcp地址连接 转发自CSDN远程穿透的文章&#xff1a;公网远程连接R…

    Java阶段二Day05

    Java阶段二Day05 文章目录 Java阶段二Day05截至此版本可实现的流程图为V14UserControllerClientHandlerDispatcherServletHttpServletResponseHttpServletRequest V15DispatcherServletHttpServletResponseHttpServletRequest V16HttpServletRequestHttpServletResponse 反射JA…

    SpringCloud整合AOP做日志管理

    目录 1、前置知识2、步骤2.1、依赖2.2、自定义注解&#xff0c;用于注解式AOP2.3、定制切面类2.4、测试 1、前置知识 切面&#xff08;Aspect&#xff09;&#xff1a;官方的抽象定义为“一个关注点的模块化&#xff0c;这个关注点可能会横切多个对象”&#xff0c;在本例中&a…

    超详细Redis入门教程——Redis命令(上)

    前言 本文小新为大家带来 超详细Redis入门教程——Redis命令&#xff08;上&#xff09; 相关知识&#xff0c;具体内容包括Redis 基本命令&#xff0c;Key 操作命令&#xff0c;String 型 Value 操作命令&#xff0c;Hash 型 Value 操作命令&#xff0c;List 型 Value 操作命令…

    快速搭建外卖配送服务:利用外卖系统源码实现

    外卖配送服务已经成为了现代消费者生活的一部分&#xff0c;它不仅方便了消费者的用餐需求&#xff0c;也给商家提供了新的销售渠道&#xff0c;同时也为外卖配送员提供了更多的就业机会。为了满足这个市场的需求&#xff0c;外卖系统源码应运而生。 外卖系统源码是一个集成了…

    第一章:数、式、方程与方程组

    1.实数 1.内容概述 1.了解实数分类2.数轴3.相反数和倒数4.绝对值5.算数平方根相关概念及有关计算2.实数分类 3.实数的基本概念 1.数轴:规定原点、正方向和单位长度的直线叫做数轴2.相反数:绝对值相同而符号相反的两个数,互称相反数3.倒数:1除以任何数的商,我们叫做倒数,0…

    超市购物系统【GUI/Swing+MySQL】(Java课设)

    系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设&#xff01;&#xff01;&#xff01; 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址&#xff1a;https://download.csdn.net/download/qq_50954361/87682510 更多系统资源库…