十一,D O M 获取

1、DOM初相识

1.1、DOM简介

文档对象模型(Document Object Model ,简称DOM),它就是一些系列编程接口,有了这些接口,就可以改变页面内容,结构和样式

名称描述
DOM文档对象模型(Document Object Model),是 JavaScript 操作 HTML 文档的接口,它最大的特点就是将文档表示为节点树。
documentdocument 对象表示整个 HTML 文档,它是 DOM 节点树的根

DOM树:

文档:

一个页面就是一个文档,DOM中使用document表示

元素:

页面中所有的标签都是元素,DOM中使用element表示

节点:

网页中所有内容都是节点(标签、属性、文本、注释等),DOM中使用node表示

在 JavaScript 中,节点(Node)是文档对象模型(DOM)的基本组成单位,它代表了文档中的各种元素、文本、属性等内容 

1.节点类型
  • 元素节点:对应 HTML 中的标签元素,如<body><div><p>等,是构成文档结构的主要部分,可以包含其他节点。通过document.getElementsByTagName()document.getElementById()等方法可以获取元素节点。例如,document.getElementById('myDiv')可以获取 id 为myDiv的元素节点。
  • 文本节点:包含在元素节点内部的实际文本内容,如<p>这是一段文本</p>中的 “这是一段文本” 就是一个文本节点。文本节点没有子节点,通过元素节点的firstChildchildNodes属性等可以访问到文本节点。
  • 属性节点:用于表示元素节点的属性,如<input type="text" value="Hello">typevalue就是<input>元素节点的属性节点。可以通过元素节点的getAttribute()setAttribute()等方法来操作属性节点。
  • 注释节点:代表文档中的注释部分,如<!-- 这是一个注释 -->就是一个注释节点。注释节点一般不会直接影响页面的显示效果,但在解析文档结构时会被识别为一种节点类型。
2.节点层次结构
  • 根节点:在 HTML 文档中,根节点是<html>元素节点,它是整个文档树的最顶层节点,所有其他节点都包含在根节点之下。
  • 父节点:一个节点的直接上级节点称为其父节点。例如,在<body><div></div></body>中,<div>的父节点是<body>
  • 子节点:一个节点的直接下级节点称为其子节点。如上述例子中,<body>的子节点是<div>。元素节点可以有多个子节点,这些子节点可以是其他元素节点、文本节点等。
  • 兄弟节点:具有相同父节点的节点互为兄弟节点。在<body><div></div><p></p></body>中,<div><p>是兄弟节点。
3.节点的属性和方法
  • nodeType:表示节点的类型,如元素节点的nodeType值为 1,文本节点的nodeType值为 3 等。
  • nodeName:返回节点的名称,对于元素节点,返回的是标签名,如<div>节点的nodeNameDIV;对于文本节点,返回#text
  • nodeValue:对于文本节点,nodeValue返回文本内容;对于属性节点,返回属性值;对于元素节点,nodeValue通常为null
  • parentNode:返回节点的父节点。
  • childNodes:返回包含节点所有子节点的列表,包括元素节点、文本节点等。
  • firstChild:返回节点的第一个子节点。
  • lastChild:返回节点的最后一个子节点。

DOM把以上内容都看作是对象

1.2、事件前言

事件,就是用户和浏览器之间的交互行为,比如:点击按钮,鼠标移动,关闭窗口.....

方式一、

标签中对应的属性(事件属性)中设置一些js代码,这样当事件被触发时,这些代码将会被执行

这种方式:结构与行为耦合,不方便维护,不推荐使用

<button id="btn"  onclick="alert('哈喽');">我是一个按钮</button> //onclick点击事件,点击的时候触发

方式二、

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

<body><button id="btn">我是一个按钮</button><script>//第一步:获取按钮对象var btn=document.getElementById("btn");//第二步:绑定一个单击事件//像这种为单击事件绑定的函数,我们称为单击响应函数btn.onclick=function(){alert("你好")}</script>    
</body>

1.3、文档的加载

浏览器在加载一个页面时,是按照自上向下的顺序加载的,读取到一行就运行一行,如果将script标签写到页面的上边, 在代码执行时,页面还没有加载,页面没有加载DOM对象也没有加载 ,会导致无法获取到DOM对象。

第一种加载情况:

将js代码编写到页面的下部就是为了,可以在页面加载完毕以后再执行js代码

<button id="btn">点我一下</button><script type="text/javascript">//获取id为btn的按钮var btn = document.getElementById("btn");//为按钮绑定一个单击响应函数btn.onclick = function () {alert("hello");};</script>

第二种加载写法:

onload事件会在整个页面加载完成之后才触发, 为window绑定一个onload事件 ,该事件对应的响应函数将会在页面加载完成之后执行, 这样可以确保我们的代码执行时所有的DOM对象已经加载完毕了

window.onload = function () {//获取id为btn的按钮var btn = document.getElementById("btn");//为按钮绑定一个单击响应函数btn.onclick = function () {alert("hello");};};

2、DOM获取

DOM在我们实际开发中主要用来操作元素。一般有以下方法获取DOM

1.访问元素节点常用的方法
名称描述
document.getElementById() 
var btn01 = document.getElementById("btn01");   //查找#btn01节点btn01.onclick = function () {var bj = document.getElementById("bj") //查找#bj节点alert(bj.innerHTML);//console.dir(bj, "bj");};
document.getElementsByTagName()
var btn03 = document.getElementById("btn03");btn03.onclick = function () {var inputs = document.getElementsByName("gender");//alert(inputs.length);for (var i = 0; i < inputs.length; i++) {//alert(inputs[i].innerHTML);// alert(inputs[i].value);alert(inputs[i].className);}};
document.getElementsByClassName()
var btn04 = document.getElementById("btn04");btn04.onclick = function () {var classs = document.getElementsByClassName("inner");for (var i = 0; i < classs.length; i++) {alert(classs[i].className);}};
document.querySelector()通过 css 选择器获取第一个符合条件的元素,返回一个 DOM 元素
例如:document.querySelector("".item"") 获取类名为 item 的第一个元素
const div = document.querySelector(".box1 div")
const div = document.querySelector("#box1")
document.querySelectorAll()

通过 css 选择器获取所有的元素,以集合的形式返回
例如:document.querySelectorAll("".item"") 获取类名为 item 所有的元素

var lis=document.querySelectorAll(li")

document.getElementsByTagName("body")

document.body

//方法一
var body=document.getElementsByTagName("body")[0];
//方法二
var body = document.body
 document.documentElement;
var html = document.documentElement;

document.all

document.getElementsByTagName("*")

 //第一种方式
var all=document.all;
//第二种方式
var all = document.getElementsByTagName("*")

2.节点的操作 
名称描述
innerText以纯文本的形式设置或者获取元素的文本内容(不常用,了解即可)
className元素节点的一个属性,用来设置或返回元素的 class 属性值
示例:oBox.className = "active"
style元素节点的一个属性,用来设置元素节点的 css 样式
例如:box.style.color=""red"" 改变 box 元素节点的字体为红色
src元素节点的一个属性,用来设置元素节点 src 属性值
例如: oImg.src="./images/2.jpg"
href元素节点的一个属性,用来设置元素节点 href 属性值
例如: oLink.href="http://www.baidu.com"
setAttribute()给元素节点设置指定的属性,并为其赋指定的值
例如:oBox.setArrtibute('data-n', 10)
getAttribute()获取元素节点指定的属性值
例如:oBox.getArrtibute('data-n')
dataset元素节点的一个属性,用来设置或返回元素以 data-*方式自定义的属性
3、节点的关系
名称描述
firstChild返回第一个子节点,包括文本节点、注释节点和元素节点等所有类型的节点
firstElementChild返回第一个子元素节点
lastChild返回最后一个子节点,包括文本节点、注释节点和元素节点等所有类型的节点
lastElementChild返回最后一个子元素节点
childNodes返回所有的子节点, 包括文本节点、注释节点和元素节点等所有类型的节点(不常用,了解即可)
children返回所有的子元素节点
parentNode返回父元素节点
previousSibling返回前一个兄弟节点,包括文本节点、注释节点和元素节点等所有类型的节点(不常用,了解即可)
previousElementSibling返回前一个兄弟元素节点(不常用,了解即可)
nextSibling返回同级的后一个节点,包括文本节点、注释节点和元素节点等所有类型的节点(不常用,了解即可)
nextElementSibling返回同级的后一个元素节点(不常用,了解即可)

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

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

相关文章

SpringBoot04-SpringBoot配置文件

4.Springboot配置文件 4.1配置文件 SpringBoot使用一个全局的配置文件 &#xff0c; 配置文件名称是固定的 application.properties 语法结构 &#xff1a;keyvalue server.port8081application.yaml 语法结构 &#xff1a;key:空格value server:port: 80814.2yaml概述 YAML…

scratch计算台阶 2024年9月scratch四级真题 中国电子学会 图形化编程 scratch四级真题和答案解析

目录 scratch计算台阶 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、p…

什么是量子计算机?

量子计算机是一种利用量子力学原理进行计算的新型计算机。 一、工作原理 传统计算机使用二进制位&#xff08;比特&#xff09;来存储和处理信息&#xff0c;每个比特只能处于 0 或 1 两种状态之一。而量子计算机使用量子比特&#xff0c;量子比特可以同时处于 0 和 1 的叠加…

DevOps业务价值流:需求设计最佳实践

DevOps实践正推动着产品快速迭代与高质量交付&#xff0c;但需求设计作为产品开发的关键起点&#xff0c;往往被忽视。它不仅是收集与分析需求的过程&#xff0c;更是将需求转化为可实施产品特性的核心。本文深入探讨DevOps业务价值流中的需求设计&#xff0c;从调研、整理、原…

科大讯飞离线lunix tts demo使用

项目中需要用到后台服务端用文本生成语音&#xff0c;网上大部分都是通过ai大模型推理出来的&#xff0c;还有写其他方式的&#xff0c;效果和生成时间都比较不理想&#xff0c;但是讯飞生成的只需要零点几秒&#xff0c;不愧是行业NO1&#xff0c;下面说下怎么使用。 1、下载官…

[ DOS 命令基础 ] DOS 命令详解-大集合

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

(61)使用LMS算法估计线性预测器并计算估计误差的MATLAB仿真

文章目录 前言一、仿真说明二、仿真代码三、仿真结果1.LMS自适应滤波器权向量更新曲线2.LMS自适应滤波器算法学习曲线3.期望信号与LMS自适应滤波器输出信号 前言 本文介绍了LMS自适应滤波器对线性预测器系统权系数的估计&#xff0c;进行100次独立实验&#xff0c;计算平均估计…

C语言进阶2:指针的进阶

文章目录 1.字符指针2.指针数组3.数组指针3.1 数组指针的定义3.2 &数组名VS数组名3.3 数组指针的使用3.3.1 对一维数组的使用3.3.2 对二维数组的使用3.3.3 巩固练习 4.数组参数、指针参数4.1 一维数组传参4.2 二维数组传参4.3 一级指针传参4.4 二级指针传参 5.函数指针6.函…

初级图像处理工具

图像处理-初级 1、功能概览 初级图像处理工具旨在为用户提供一个易于使用的界面来执行常见的图像处理任务。该工具集成了多项实用功能&#xff0c;从显示和调整图像的基本属性到应用各种滤镜效果&#xff0c;用户都可以通过简单的命令行交互来完成。 我们的初级图像处理工具…

【C语言】实战-力扣题库:回文链表

题目描述 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 提示&#xff1a; 链表中节点数目在范围[1, 105] 内0 < Node.val < 9 进阶&#xff1a;你能否用 O(n) 时间…

Flink滑动窗口(Sliding)中window和windowAll的区别

滑动窗口的使用&#xff0c;主要是计算&#xff0c;在reduce之前添加滑动窗口&#xff0c;设置好间隔和所统计的时间&#xff0c;然后再进行reduce计算数据即可。 窗口设置好时间间隔&#xff0c;和处理时间窗口的时间&#xff0c;比如将滑动窗口的时间间隔都设置为5s,处理时间…

AWS云服务器选择哪个区域最好?

选择AWS云服务器的区域&#xff08;Region&#xff09;是一个非常重要的决策&#xff0c;因为它会影响你的应用性能、成本和合规性。以下是九河云总结的一些选择AWS区域时需要考虑的关键因素&#xff1a; 1. 地理位置和延迟 选择离你的用户或客户最近的区域可以最大程度减少网…

高频面试题(含笔试高频算法整理)基本总结回顾30

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版和持续更新见高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言…

6.气泵控制原理---单双向可控硅控制原理、斩波电路、项目举例说明

最近在项目开发中&#xff0c;涉及到气泵的相关控制&#xff0c;在这里进行比较系统的学习。对交直流气泵区别进行一个说明 &#xff0c;同时了解一下单向和双向可控硅&#xff0c;最后根据项目实例进行了解。因为个人比较偏软件&#xff0c;有什么不对的地方欢迎指正。 一交流…

element-plus table tableRowClassName 无效

官网上给的是 .el-table .warning-row {--el-table-tr-bg-color: var(--el-color-warning-light-9); } .el-table .success-row {--el-table-tr-bg-color: var(--el-color-success-light-9); } 但是 如果 加上了 scoped 这样样式是无效的 在 vue3 中用样式穿透 即可生…

Python自动化测试框架详解!

随着技术的进步和自动化技术的出现&#xff0c;市面上出现了一些自动化测试框架。只需要进行一些适用性和效率参数的调整&#xff0c;这些自动化测试框架就能够开箱即用&#xff0c;大大节省了开发时间。而且由于这些框架被广泛使用&#xff0c;他们具有很好的健壮性&#xff0…

【数据结构实战】从0打造你的专属顺序表

专栏&#xff1a;《数据结构实战篇》 生活中有着无穷无尽的数据需要存储&#xff0c;大到全国人口普查&#xff0c;小到微信、QQ好友列表&#xff0c;都需要有一个合理的存储方式才能使得我们的数据更方便管理&#xff0c;线性表就是其中之一 一、线性表 线性表&#xff08;li…

RFID标签实现托盘智能化管理

一、RFID技术概述 1.1 RFID技术原理 RFID技术&#xff0c;即无线射频识别技术&#xff0c;是一种利用无线电波进行非接触式自动识别和数据交换的技术。其核心优势在于能够实现远距离、快速、批量的识别&#xff0c;相较于传统的条形码技术&#xff0c;RFID技术在物资管理领域展…

net core 生成URL HtmlHelper

HtmlHelper Url.Action Url.RouteUrl RedirectToAction public IActionResult Privacy(){return RedirectToAction("Index");}Html.ActionLink Html.BeginForm Html.ActionLink 与 Url.Action 1.两者者是根据给定的Controller,Action 生成链接&#xff0c; 但是H…

零日漏洞被谷歌的 AI 工具发现

谷歌的 AI 研究工具 Big Sleep 取得了重大突破&#xff0c;发现了 SQLite 中的漏洞&#xff0c;SQLite 是全球使用最广泛的数据库引擎之一。 Google Project Zero 和 Google DeepMind 团队最近在官方博客文章中分享了这一里程碑&#xff0c;标志着 AI 驱动的漏洞检测在现实世界…