DOM(一)——DOM树和查找元素

article/2025/10/31 16:07:42

文章目录

  • 一、DOM
  • 二、DOM树
  • 三、查找元素
    • 1. 不需要查找,就可直接获得元素/对象
    • 2. 按节点间关系查找
      • a. 节点树(不建议使用)
      • b. 元素树
    • 3. 按HTML特征查找
      • 1) 按id名查找一个元素
      • 2) 按标签名查找多个元素
      • 3) 按class名查找多个元素
      • 4)按name名查找多个表单元素:
    • 4. 按选择器查找
  • 四、DOM效果标准4步
    • 4.1 事件绑定
      • a. 手工在html中元素开始标签中绑定事件处理函数
      • b.在js中绑定

一、DOM

DOM(Document Object Model文档对象模型): 专门操作网页内容的一套对象和函数的总称

DOM标准:国际标准,由W3C负责制定并维护,几乎所有浏览器100%兼容

5件事: 增删改查+事件绑定

二、DOM树

DOM树:一个网页的所有内容在浏览器内存中,以树形结构(树形结构是最直观的展现上下级包含关系的结构。而网页内容中的元素结构,也是上下级包含关系)保存

  1. 浏览器读取到一个网页的内容,都会先在内存中创建一个唯一的树根节点对象: document

  2. 浏览器扫描网页内容,扫描到 一项内容(元素、文本、属性…),就会自动 创建一个新的 节点对象(Node),保存当前这一项内容的属性和值。然后将新创建的节点对象,保存到DOM树上对应的位置

在这里插入图片描述

三、查找元素

1. 不需要查找,就可直接获得元素/对象

  1. 根节点对象: document
  2. html元素节点对象: document.documentElement
  3. head元素节点对象: document.head
  4. body元素节点对象: document.body

2. 按节点间关系查找

按照元素在DOM树中的上下级或平级关系查找其它元素

适用: 已经获得一个DOM元素对象,想找这个DOM元素对象周围附近的元素时,才用节点间关系

a. 节点树(不建议使用)

包含所有网页内容的完整树结构,有2大类关系,6个属性:

i.父子关系: 4个属性

  • 获得一个节点对象的父级节点对象
    节点对象.parentNode —— 返回一个节点对象

  • 获得一个节点对象下的所有直接子节点对象的集合
    节点对象.childNodes —— 返回类数组对象

  • 获得一个节点对象下的第一个直接子节点对象
    节点对象.firstChild —— 返回一个节点对象

  • 获得一个节点对象下的最后一个直接子节点对象
    节点对象.lastChild —— 返回一个节点对象

ii. 兄弟关系: 2个属性

  • 获得一个节点对象相邻的前一个兄弟节点对象
    节点对象.previousSibling

  • 获得一个节点对象相邻的下一个兄弟节点对象
    节点对象.nextSibling

缺点: 节点树会将看不见的回车、空格等空字符也创建为节点对象。严重干扰我们的查找结果!
所以,今后几乎不用节点树。

b. 元素树

包含元素节点的树形结构

优点:不会受到看不见的空字符的干扰!
所以,将来只要按节点间关系查找元素时,都用元素树

i. 父子关系: 4个属性

  • 获得一个元素对象的父级元素对象
    元素对象.parentElement —— 返回一个元素对象

  • 获得一个元素对象下的所有直接子元素对象的集合
    元素对象.children —— 返回类数组对象

  • 获得一个元素对象下的第一个直接子元素对象
    元素对象.firstElementChild —— 返回一个元素对象

  • 获得一个元素对象下的最后一个直接子元素对象
    元素对象.lastElementChild—— 返回一个元素对象

ii. 兄弟关系: 2个属性

  • 获得一个元素对象相邻的前一个兄弟元素对象
    元素对象.previousElementSibling

  • 获得一个元素对象相邻的下一个兄弟元素对象
    元素对象.nextElementSibling

在这里插入图片描述
示例:

<!DOCTYPE HTML>
<html>
<head>
<title>DOM Tree</title>
<meta charset="utf-8" />
</head>
<body><span id="s1">Hello</span>
<h1>标题一</h1><script>
//获得body的第一个直接子元素span
var span=document.body.firstElementChild
console.log(span); //希望<span>…</span>//获得span的下一个兄弟h1
var h1=span.nextElementSibling;
console.log(h1); //希望<h1>…</h1>//获得body下所有直接子元素的集合:3个元素,返回一个类数组对象
console.log(document.body.children); //希望[span, h1, script]
</script>
</body>
</html>

3. 按HTML特征查找

1) 按id名查找一个元素

//在整个页面中通过id名查找元素
var 一个元素对象=document.getElementById("id名")

返回值:

  • 如果找到符合要求的元素,则只返回一个元素对象
  • 如果没找到,则返回null

注意:

  1. .前的主语必须是document
  2. 只找一个元素,所以函数名中Element没有s结尾,是单数形式

示例:

<ul id="nav"><li class="item">电影</li><li class="item">剧集</li>
</ul>	
<script>//查找id为nav的一个元素对象var ulNav=document.getElementById("nav")console.log(ulNav);
</script>

2) 按标签名查找多个元素

// 在指定父元素范围内通过标签名获取多个元素
var 类数组对象=任意父元素.getElementsByTagName("标签名")

返回值:

  • 如果找到符合要求的元素,就返回类数组对象
  • 如果没找到,返回空类数组对象: { length:0 }

注意:

  1. 多个元素,所以返回值为类数组对象,函数名中的Elements以s结尾,表示复数
  2. 指定只在一个父元素范围内查找符合要求的元素。——优化,查找范围越小,查找越快!
  3. 不仅查找直接子元素,而且会在所有后代元素中查找符合要求的元素。
  4. 函数规定要返回类数组对象,那么在任何时候,都会返回类数组对象!
    即使只找到一个元素,也会把这唯一的一个元素放在类数组对象中第一个位置返回。所以,如果只找到一个符合要求的元素时,必须用[0],取出类数组对象中第一个位置保存的元素对象,才能对这个元素对象继续执行后续操作!

示例:

<span>Hello World !</span>
<ul id="nav"><li class="item">电影</li><li class="item">综艺<ul><li class="item active">你好</li></ul></li><li class="item">剧集</li>
</ul>	<script>//前提: 已经找到ulNav了//想继续在ulNav下查找所有的li元素var lis=ulNav.getElementsByTagName("li");console.log(lis);//查找整个页面中唯一的一个span元素,并设置span的字体颜色为红色var span = document.getElementsByTagName("span")[0];console.log(span);span.style.color="red";//<span style="color:red">
</script>

3) 按class名查找多个元素

// 在指定父元素范围内通过class名获取多个元素var 类数组对象=任意父元素.getElementsByClassName("class名")

返回值:

  • 如果找到符合要求的元素,就返回类数组对象
  • 如果没找到,返回空类数组对象: { length:0 }

注意:

  1. 多个元素,所以返回值为类数组对象,函数名中的Elements以s结尾,表示复数
  2. 指定只在一个父元素范围内查找符合要求的元素。——优化,查找范围越小,查找越快!
  3. 不仅查找直接子元素,而且会在所有后代元素中查找符合要求的元素。
  4. 函数规定要返回类数组对象,那么在任何时候,都会返回类数组对象!
    即使只找到一个元素,也会把这唯一的一个元素放在类数组对象中第一个位置返回。所以,如果只找到一个符合要求的元素时,必须用[0],取出类数组对象中第一个位置保存的元素对象,才能对这个元素对象继续执行后续操作!

示例:

<ul id="nav"><li class="item">电影</li><li class="item">综艺<ul><li class="item active">跑男</li><li class="item">爸爸</li><li class="item">极限</li></ul></li><li class="item">剧集</li>
</ul>	<script>//想在ulNav下查找所有class为item的li元素var lis=ulNav.getElementsByClassName("item");console.log(lis);//想class为active的一个元素字体变为绿色var liActive=ulNav.getElementsByClassName("active")[0];console.log(liActive);liActive.style.color="green";
</script>

4)按name名查找多个表单元素:

//在整个页面范围内通过name名获取多个元素
var 类数组对象=document.getElementsByName("name名")

返回值:

  • 如果找到符合要求的元素,就返回类数组对象
  • 如果没找到,返回空类数组对象: { length:0 }

注意:

  1. .前的主语必须是document组对象
  2. 多个元素,函数名中的Elements 以s结尾,表示复数
  3. 函数规定要返回类数组对象,那么在任何时候,都会返回类数组对象!
    即使只找到一个元素,也会把这唯一的一个元素放在类数组对象中第一个位置返回。所以,如果只找到一个符合要求的元素时,必须用[0],取出类数组对象中第一个位置保存的元素对象,才能对这个元素对象继续执行后续操作!
  4. 一般常用于表单组件

示例:

<form>用户名:<input name="uname"><br/>性别:<label><input type="radio" name="sex" value="1"></label><label><input type="radio" name="sex" value="0"></label>
</form>
<script>//查找网页中两个name为sex的radio元素var radios=document.getElementsByName("sex");console.log(radios);//查找网页中唯一一个name为uname的input元素,为其添加红色阴影var input=document.getElementsByName("uname")[0];console.log(input);input.style.boxShadow="0 0 5px red";
</script>

4. 按选择器查找

**适用:**元素藏的深、分散,查找条件复杂

(1)只查找一个符合要求的元素

var 一个元素对象=任意父元素.querySelector("选择器")//返回一个元素对象

(2)查找多个符合要求的元素

 var 类数组对象=任意父元素.querySelectorAll("选择器")//返回的一个元素集合

示例:

<div class="content"><ul><li>首页</li><li>财经</li><li>娱乐</li></ul>
</div>
var l1 = document.querySelector(".content ul li");  //获得第一个li元素
var lis =  document.querySelectorAll(".content ul li");     //获得所有li元素

四、DOM效果标准4步

(1). 查找所有可能触发事件的元素
(2). 绑定事件处理函数
(3). 查找要修改的元素
(4). 修改元素

4.1 事件绑定

事件: 浏览器自动触发的或用户手动触发的页面中内容或状态的变化

绑定事件处理函数: 2种

a. 手工在html中元素开始标签中绑定事件处理函数

<元素  on事件名="事件处理函数()">
<script>function 事件处理函数(){ ... }
</script>

缺点:全手工添加,极其不便于维护!——几乎不用

b.在js中绑定

每个元素对象身上,都长着一批名称以on开头的"事件属性"
比如: onclick, onfocus, onmouseover,…

当一个元素身上发生了一个事件时,浏览器会先在这个元素身上找到对应的事件属性,并执行事件属性中保存的事件处理函数。

事件绑定: 提前在元素的某个事件属性上保存一个function函数。当事件发生时,浏览器就可以找到这个函数,并自动执行!

①先找到要触发事件的元素
元素对象.on事件名=function(){ ... }

优点自动绑定,可以与for循环配合批量绑定,集中绑定

<table id="data">
<tr><td><button>-</button><span>1</span><button>+</button></td>
</tr>
<tr><td><button>-</button><span>1</span><button>+</button></td>
</tr>
</table><script>//1. 查找触发事件的元素:查找table下所有button元素//1.1 先找id为data的tablevar table=document.getElementById("data");console.log(table);//1.2 再在table范围内找所有buttonvar btns=table.getElementsByTagName("button");console.log(btns);//类数组对象//2. 绑定事件处理函数: //先遍历查找结果中每个按钮对象for(var btn of btns) {//每遍历一个按钮对象,就为当前按钮绑定单击事件的处理函数btn.onclick=function(){alert("疼!")}}
</script>

http://chatgpt.dhexx.cn/article/ScqeNqYF.shtml

相关文章

DOM树和CSSOM树的构建和渲染

页面的渲染过程 当我们在浏览器里输入一个 URL 后&#xff0c;最终会呈现一个完整的网页。会经历以下几个步骤&#xff1a; 1、HTML 的加载 页面上输入 URL 后&#xff0c;会先拿到 HTML 文件。HTML是一个页面的基础&#xff0c;所以会在最开始的时候下载它&#xff0c;下载…

深入解析DOM树的加载

DOM树 在介绍 DOM 树之前&#xff0c;首先要清楚&#xff0c;DOM 规范中&#xff0c;对于文档的表示方法并没有任何限制&#xff0c;因此&#xff0c;DOM 树只是多种文档结构中的一种较为普遍的实现方式。 DOM 结构构成的基本要素是 “节点“&#xff0c;而文档的结构就是由层…

DOM树节点解析

目录(?)[] 转自&#xff1a;http://blog.csdn.net/skyer518/article/details/37904787 DOM是解析XML文件的官方标准&#xff0c;它与平台和语言无关。DOM解析将整个XML文件载入并组装成一棵DOM节点树&#xff0c;然后通过遍历、查找节点以读取XML文件中定义的数据。由于DOM解析…

JavaScript之DOM树

一、什么是DOM树&#xff1f; DOM &#xff08;Document Object Model&#xff09;是指文档对象模型&#xff0c;通过它&#xff0c;可以访问HTML文档的所有元素。 DOM树是结构&#xff0c;所谓层级结构是指元素和元素之间的关系&#xff1a;父子&#xff0c;兄弟。 文档&am…

JavaScript的DOM 树是如何构建的 ?

今天通过对 DOM 模型、HTML 解释器和 JavaScript 的执行的介绍&#xff0c;来初步学习 HTML 解释器是如何将从网络或者本地文件获取的字节流转成 DOM 树的。 DOM 模型 1、DOM 标准 DOM (Document Object Model) 的全称是文档对象模型&#xff0c;它可以以一种独立于平台和语言…

DOM系列:DOM树和遍历DOM

上一节&#xff0c;咱们整理了DOM系列中的第一篇&#xff0c;主要介绍浏览器与DOM相关的知识。从标题中我们可以看出来&#xff0c;今天所要学的东西包含两个部分&#xff0c;第一部分是DOM树&#xff0c;第二部分是遍历DOM。如果你和我一样对于DOM树和遍历DOM是初次接触&#…

DOM树的理解【面试常问】

前言 vue和react框架被广泛应用&#xff0c;封装了DOM操作但是DOM操作一直都是前端工程师的基础、必备知识只会vue而不懂DOM操作的程序员&#xff0c;不会长久 DOM 全称为文档对象模型&#xff08;Document Object Model&#xff09;。有这几个概念&#xff1a; 文档、元素…

DOM树知识点梳理

为什么会提到Dom树呢,或许它对于我们很好地理解网页各个元素,标签和控件搭配,以及各种js,css等的加载会有一些帮助。笔者在工程中遇到了一些小问题,本质就是dom树的东西掌握的不扎实。所以借此来梳理一下。 1.HTML DOM ok, 我们先来看一下W3school中怎么解释这个概念和结…

浏览器-DOM树

前言&#xff1a; 在渲染流水线中直接或者间接地依赖于 DOM 结构&#xff0c;本文按着网络数据流路径来介绍 DOM 树是如何进行构建的。 节点&#xff08;Node&#xff09;&#xff1a; 节点&#xff08;Node&#xff09;原本是网络术语&#xff0c;表示网络中的连接点。一个网…

Dom树,什么是dom树?

相信很多初学前端的小伙伴&#xff0c;学了html, css, js之后&#xff0c;会遇到 一个名词 DOM树。 首先说一下DOM是什么&#xff1f; DOM 是 Document Object Model&#xff08;文档对象模型&#xff09;的缩写。 举个例子 我们日常生活中&#xff0c;经常会遇到一些写文档…

对 Dom 树的理解

什么是 DOM 从网络传给渲染引擎的 HTML 文件字节流是无法直接被渲染引擎理解的&#xff0c;所以要将其转化为渲染引擎能够理解的内部结构&#xff0c;这个结构就是 DOM。 DOM 提供了对 HTML 文档结构化的表述。 在渲染引擎中&#xff0c;DOM 有三个层面的作用&#xff1a; …

DOM初探(9)——DOM结构树

document一回车&#xff0c;他就代表整个文档&#xff1b;Document一回车&#xff0c;他代表的是一个函数&#xff0c;什么函数需要首字母大写&#xff1f;构造函数吧&#xff0c;只不过这个Document有点特殊&#xff0c;你不能new他&#xff0c;这时系统留给自己new的。那这个…

dom树是如何生成的

页面得渲染流程总得俩说就五步&#xff0c;创建 DOM 树——创建 StyleRules——创建 Render 树——布局Layout&#xff08;重排&#xff09;——绘制 Painting&#xff08;重绘&#xff09; 第一步&#xff0c;用 HTML 分析器&#xff0c;分析 HTML 元素&#xff0c;构建一颗 D…

Dom树 CSS树 渲染树(render树) 规则、原理

前端不可不学的浏览器渲染机制&#xff0c;阿里年年问&#xff0c;去一个栽一个。听说百度也在考这个&#xff0c;你还不准备学吗&#xff1f; 首先你要了解浏览器渲染的顺序&#xff1a;   1.构建dom 树   2.构建css 树   3.构建渲染树   4.节点布局   5.页面渲染 什么…

HTML-DOM树篇

一、什么是DOM DOM&#xff08;Document Object Model&#xff09; 文档对象模型&#xff0c;是HTML和XML文档的编程接口 DOM 以树结构表达 HTML 文档&#xff0c;树的每个分支的终点都是一个节点&#xff0c;每个节点都包含着对象DOM 将web页面与脚本或编程语言链接起来&#…

DOM结构(DOM树)

DOM 文档类型DOM&#xff08;Document Object Model&#xff09;主要用于HTML文档和XML文档的内容进行操作。DOM描绘了一个层次化的节点树&#xff0c;通过节点的操作&#xff0c;来实现对文档内容进行增删改查。 1.DOM&#xff08;Document Object Model&#xff09;&#x…

DOM(一)概述、dom树、查找元素

目录 一、DOM 概述 二、DOM树 二、查找元素 1. 无需查找的元素 2. 按节点间关系查找 3. 按 HTML 特征查找 三、案例&#xff1a;通过DOM实现购物车效果 一、DOM 概述 DOM全称 Document Object Model&#xff0c;是专门操作网页内容的一套对象和函数的总称。由于 ES 标准…

DOM深入学习 --- DOM 树介绍,如何遍历 DOM 树节点(一)

DOM 树 HTML 文档的主干是标签&#xff08;tag&#xff09;。 根据文档对象模型&#xff08;DOM&#xff09;&#xff0c;每个 HTML 标签都是一个对象。嵌套的标签是闭合标签的“子标签&#xff08;children&#xff09;”。标签内的文本也是一个对象。 所有这些对象都可以通…

什么是DOM?你了解DOM树吗?

在找工作的过程中&#xff0c;看到了招聘信息上有写这么一条信息&#xff1a; 掌握WEB前端开发技术&#xff1a;JavaScript(含ES6)、HTML、CSS、DOM等 看见这条信息我心里安心了不少&#xff0c;都是一些基础问题&#xff0c;但是乍一看DOM&#xff0c;脑子有点短路了&#x…

Windows命令:CHCP

CHCP 用途一&#xff1a;Windows操作系统默认编码格式是GBK&#xff08;963&#xff09;&#xff0c;cmd窗口编码方式设置为UTF-8方法&#xff1a; 临时修改方案&#xff1a;CHCP 65001永久修改方案&#xff1a;参考资料&#xff1a;https://jingyan.baidu.com/article/d71306…