当前位置: 首页 > news >正文

2.9学习DOM和BOM (主要是获取元素的操作)

0.认识DOM和BOM

*前面我们花了很多时间学习JavaScript的基本语法,但是这些基本语法,但是这些语法好像和网页没有关系,和前面学习的HTML、CSS也没有什么关系?

这时因为我们前面学习的部分属于ECMAScript,也就是JavaScirpt本身的语法部分;

除了语法部分之外,我们还需要学习浏览器提供给我们开发者的DOM、BOM相关的API(application programming interface 应用程序编程接口)才能对页面、浏览器进行操作

*前面我们学习了一个window的全局对象,window上事实上就包含了这些内容:

我们已经学习了JavaScript语法部分的Object、Array、Date等

另外还有DOM、BOM部分;

DOM:文档对象模型(Document Object Model)

简称DOM,将页面所有的内容表示为可以修改的对象;

(把我们编写的代码抽象成一个文档,文档中所有的内容都是一个个的对象,我们要做的就是对这些对象进行修改,例如;在修改的时候先拿到对象,再对这个对象进行修改)

BOM:浏览器对象模型(Browser Object Model)

简称 BOM ,由浏览器提供的用于处理文档(document)之外的所有内容的其他对象;

比如navigator、location、history等对象;

0.1深入理解DOM

浏览器会对我们编写的HTML、CSS进行渲染,同时它又要考虑我们可能会通过JavaScript来对其进行操作;

于是浏览器将我们编写再HTML中的每一个元素(Element)都抽象成了一个个对象;

所有这些对象都可以通过JavaScript来对其进行访问,那么我们就可以通过JavaScript来操作页面;

所以,我们将这个抽象的过程称之为文档对象模型(Document Object Model);

0.2学习顺序

DOM 相关的 API 非常多,我们会通过如下顺序来学习:

 
  1. DOM 元素之间的关系
  2. 获取 DOM 元素
  3. DOM 节点的 type、tag、content
  4. DOM 节点的 attributes、properties
  5. DOM 节点的创建、插入、克隆、删除
  6. DOM 节点的样式
  7. DOM 元素 /window 的大小、滚动、坐标

0.3DOM的继承关系图

    <script>//继承的概念//在ES6之后,可以用class定义一个类//和function定义类是一样的//语法如下class Person{constructor(name, age) {this.name = namethis.age = age}running() {}eating() {}}class Student extends Person{studying() {}}class SmallStudent extends Student{dwzry(){}}class BigStudent extends Student {xwjf(){}}class Teachr extends Person{}var stu = new Student("why", 18)stu.running()stu.eating()stu.studying()//继承的好处//1.增加代码的复用性//2.继承是多态的</script>

1.Document对象-导航

把代码抽离成一个对象,我们的document就是在对对象里面的元素进行操作。

Document 节点表示的整个载入的网页,它的实例是全局的 document 对象:

 
  • 对 DOM 的所有操作都是从 document 对象开始的;
  • 它是 DOM 的入口点,可以从 document 开始去访问任何节点元素;
 

对于最顶层的 html、head、body 元素,我们可以直接在 document 对象中获取到:

 
  • html 元素:<html> = document.documentElement
  • body 元素:<body> = document.body
  • head 元素:<head> = document.head
  • 文档声明: = document.doctype

1.1document对象和节点之间的关系

1.2节点(Node)之间的导航(navigator)

如果我们获取到一个节点(Node)后,可以根据这个节点去获取其他的节点,我们称之为节点之间的导航。
节点之间存在如下的关系:

  • 父节点:parentNode
  • 前兄弟节点:previousSibling
  • 后兄弟节点:nextSibling
  • 子节点:childNodes
  • 第一个子节点:firstChild
  • 第二个子节点:lastChild

1.3元素(element)之间的导航

如果我们获取到一个节点(Node)后,可以根据这个节点去获取其他的节点,我们称之为节点之间的导航。

 

节点之间存在如下的关系:

  • 父节点:parentNode
  • 前兄弟节点:previousSibling
  • 后兄弟节点:nextSibling
  • 子节点:childNodes
  • 第一个子节点:firstChild
  • 第二个子节点:lastChild
  • <!DOCTYPE html>
    <html lang="en">
    <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
    </head>
    <body><!-- 我是注释,哈哈哈哈 -->我是文本,哈哈哈哈<div class="box">哈哈哈</div><ul><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li></ul><script>var bodyE1 = document.body//根据body元素去获取子元素(element)var childElement = bodyE1.childrenconsole.log(childElement)//获取box元素var boxEl1 = bodyE1.firstElementChildvar boxEl2 = boxEl1.children[0]console.log(boxEl1, boxEl2, boxEl1 === boxEl2)//获取ul元素var ulEl = boxEl1.nextElementSiblingconsole.log(ulEl)//获取li元素var liEl = ulEl.childrenconsole.log(liEl)</script>
    </body>
    </html>

1.4table和form的导航关系 

1.4.1代码提示技巧

这里有一个好用的技巧:

因为在代码table中获取元素提示性比较的差,所以,可以加上

1.4.2table导航关系 

  • <table> 元素支持(除了上面给出的,之外)以下这些属性:
    • table.rows — <tr> 元素的集合;
    • table.caption/tHead/tFoot — 引用元素 <caption>,<thead>,<tfoot>;
    • table.tBodies — <tbody> 元素的集合;
  •   <thead>,<tfoot>,<tbody> 元素提供了 rows 属性:
    • tbody.rows — 表格内部 <tr> 元素的集合;
  • <tr>:
    • tr.cells — 在给定 <tr> 中的 <td> 和 <th> 单元格的集合;
http://www.lryc.cn/news/596116.html

相关文章:

  • 【element-ui el-table】多选表格勾选时默认勾选了全部,row-key绑定异常问题解决
  • 重塑优化建模与算法设计:2025年大模型(LLM)在优化领域的应用盘点 - 1
  • MybatisPlus-16.扩展功能-枚举处理器
  • SpringMVC快速入门之核心配置详解
  • 【windows修复】解决windows10,没有【相机] 功能问题
  • Azure可靠性架构指南:构建云时代的高可用系统
  • xss-labs解答
  • 本地数据库有数据,web页面无信息显示,可能是pymysql的版本问题【pymysql连接本地数据库新旧版本的区别】
  • 【51单片机定时器T0输出10毫秒周期方波12M晶振】2022-6-28
  • Web开发 05
  • verilator如何实现RTL的仿真(腾讯混元)
  • 牛客NC16625 [NOIP2009]分数线划定(排序)
  • vue3:十八、内容管理-实现内容的数据展示,开关switch设行,tag标签展示
  • 北京-4年功能测试2年空窗-报培训班学测开-第五十七天
  • Datawhale AI 夏令营-心理健康Agent开发学习-Task1
  • React 面试题库
  • Vue 3 面试题全套题库
  • 前端面试专栏-工程化:29.微前端架构设计与实践
  • class和struct的区别
  • RAG实战指南 Day 21:检索前处理与查询重写技术
  • 腾讯研究院 | AI 浪潮中的中国品牌优势解码:华为、小米、大疆、科大讯飞等品牌从技术破壁到生态领跑的全维突围
  • Kotlin调试
  • IO复用(多路转接)
  • Windows Server 设置MySQL自动备份任务(每日凌晨2点执行)
  • 二叉树的题目,咕咕咕
  • VirtualBox安装提示security安全问题
  • 控制器(Controller)模块的架构与工作流程 -OpenExo
  • Agent架构与工作原理:理解智能体的核心机制
  • Nacos 注册中心高频面试题及解析
  • 从感知到决策:虚拟仿真系统与视觉算法融合下的多路RTSP视频接入技术探究