简单的DOM的相关总结

简介: 简单的DOM的相关总结

简单的DOM的相关总结


DOM 全称是Document object model,翻译为,文档对象模型,是 HTML 和 XML 文档的编程接口。

把 HTML 中各个标签定义出的元素以对象的形式包装起来,然后可通过 JS 对标签进行增删改查。

DOM 结构以树的形态存在,最小单位是节点。

DOM的节点类型

节点类型主要有:

  • Document:指这份文件,也就是这份 HTML 档的开端。当浏览器载入 HTML 文档, 它就会成为 Document 对 象。
  • Element:指 HTML 文件内的各个标签,像是<div>、<span> 这样的各种 HTML 标签定义的元素
  • Text:指被各个标签包起来的文字,像是<div>就是这段文字</div>
  • Attribute:指元素的特性,就是各个标签上的属性
  • Comment:指文档注释<!-- 注释 -->

DOM 的增删改查

  • 增:document.createElement('span')、parent.appendChild(x)
  • 删:y.parent.removeChild(y)
  • 改:x.someAttr = '...'、y.parent.insertBefore(appendElement,ele)
  • 查 querySelector、querySelectorAll、getElementById/ClassName/TagName

DOM 事件体系

先说下专有名词:

  • 事件:在浏览器里的动作,可以是用户触发的,也可以是浏览器触发的。如click mouseover
  • 事件监听函数:也叫事件处理程序,是事件发生后,浏览器如何响应,其实就是用来应答事件的函数,。
  • 事件流(事件的流向):事件在页面中传播的顺序

体系主要从四方面理解:

  • DOM 事件流,分 3 个阶段:事件捕获阶段、目标阶段、冒泡阶段(V字形)
  • 事件对象:当事件 DOM 元素中穿梭时,会触发当前元素上绑定的相应事件处理函数,此时会产生一个事件对象 event 作为处理函数的入参。其囊括了与事件有关的信息,比如由触发事件的元素、事件的类型等
  • 自定义事件
  • 事件代理

事件对象

e.currentTarget 和 e.target 事件对象两个属性很容易混淆,简单说下联系和区别:

  • 本质上e.currentTarget是绑定事件的当前元素,e.target是触发事件的元素。
  • 因为有捕获和冒泡阶段,所以这两可能不一样
  • 假设有个div,里面有一个 span 标签和 b 标签,给 div 绑定点击事件的时候,e.currentTarget始终是 div,但是如果点击的是span标签,e.target就是span
  • 重点!!!如果点击这两标签之外的但又是 div 内部的区域,e.target就是div,此时和e.currentTarget是一致的

常用的两个方法:

  • event.stopPropagation(),让事件不再冒泡,将事件的影响面控制在目标元素这个范围内
  • event.preventDefault(),阻止浏览器的默认动作,比如点击 a 标签会跳转

自定义事件

除了浏览器的默认事件click之类,开发者可以自己创建新事件。

比如现在有三个同级元素a b c,点击 a 之后,想要 b 和 c 也知道 a 被点击。

那么可以创建一个clickA事件,然后让 b 和 c 绑定这个事件,点击 a 之后就让 b 和 c 触发这个事件

看个例子:

<div>
  <div id="a">a</div>
  <div id="b">b</div>
  <div id="c">c</div>
</div>
<script>
  // 新建一个自定义事件
  var clickA = new Event("clickA");
  document.querySelector("#a").addEventListener("click", function() {
    // a点击之后,就是clickA事件触发的时候,但浏览器不认识它,所以感知和派发,可以自己来实现:
    document.querySelector("#b").dispatchEvent(clickA);
    document.querySelector("#c").dispatchEvent(clickA);
  });
  document.querySelector("#b").addEventListener("clickA", () => {
    console.log("b");
  });
  document.querySelector("#b").addEventListener("clickA", () => {
    console.log("c");
  });
</script>

事件代理

事件在冒泡阶段的时候,会将事件一层层传播,直到整个文档。而从事件对象的target属性,可以知道传播到哪里了。

于是,利用事件的冒泡特性,可以将多个子元素的同一类型的监听逻辑,合并到父元素上通过一个监听函数来管理的行 为,就是事件代理。

通过事件代理,我们可以减少内存开销、简化注册步骤,大大提高开发效率。

<ul>
  <li>1</li>
  <li>2</li>
</ul>
<script>
  var ul = document.querySelector("ul");
  ul.addEventListener("click", function(e) {
    // 这里点击不同的li就会输出相应的内容,e.target就是正在点击的元素
    console.log(e.target.innerHTML);
  });
</script>


目录
相关文章
|
5天前
|
存储 人工智能 安全
AI 越智能,数据越危险?
阿里云提供AI全栈安全能力,为客户构建全链路数据保护体系,让企业敢用、能用、放心用
|
8天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
7天前
|
数据采集 人工智能 自然语言处理
3分钟采集134篇AI文章!深度解析如何通过云无影AgentBay实现25倍并发 + LlamaIndex智能推荐
结合阿里云无影 AgentBay 云端并发采集与 LlamaIndex 智能分析,3分钟高效抓取134篇 AI Agent 文章,实现 AI 推荐、智能问答与知识沉淀,打造从数据获取到价值提炼的完整闭环。
448 93
|
1天前
|
开发者
「玩透ESA」ESA启用和加速-ER在加速场景中的应用
本文介绍三种配置方法:通过“A鉴权”模板创建函数并设置触发器路由;在ESA上配置回源302跟随;以及自定义响应头。每步均配有详细截图指引,帮助开发者快速完成相关功能设置,提升服务安全性与灵活性。
286 2
|
7天前
|
SQL 人工智能 自然语言处理
Geo优化SOP标准化:于磊老师的“人性化Geo”体系如何助力企业获客提效46%
随着生成式AI的普及,Geo优化(Generative Engine Optimization)已成为企业获客的新战场。然而,缺乏标准化流程(Geo优化sop)导致优化效果参差不齐。本文将深入探讨Geo专家于磊老师提出的“人性化Geo”优化体系,并展示Geo优化sop标准化如何帮助企业实现获客效率提升46%的惊人效果,为企业在AI时代构建稳定的流量护城河。
406 156
Geo优化SOP标准化:于磊老师的“人性化Geo”体系如何助力企业获客提效46%
|
7天前
|
数据采集 缓存 数据可视化
Android 无侵入式数据采集:从手动埋点到字节码插桩的演进之路
本文深入探讨Android无侵入式埋点技术,通过AOP与字节码插桩(如ASM)实现数据采集自动化,彻底解耦业务代码与埋点逻辑。涵盖页面浏览、点击事件自动追踪及注解驱动的半自动化方案,提升数据质量与研发效率,助力团队迈向高效、稳定的智能化埋点体系。(238字)
313 158