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

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.xdnf.cn/news/16117.html

相关文章:

  • 苍穹外卖DAY10
  • 如何用 LUKS 和 cryptsetup 为 Linux 配置加密
  • Flink框架:keyBy实现按键逻辑分区
  • Linux物理地址空间入门:从硬件到内核内存的基石
  • 网络设备功能对照表
  • Pytorch张量
  • 云原生技术与应用-Kubernetes Pod调度基础
  • jdk25浅谈
  • 深度学习-常用环境配置
  • 使用 Tailwind CSS 控制元素在移动端不显示
  • MySQL 核心知识点梳理(2)
  • C++ 分配内存释放内存
  • 深度学习 ---神经网络以及数据准备
  • 清理磁盘空间
  • LiteCoT:难度感知的推理链压缩与高效蒸馏框架
  • NISP-PTE基础实操——代码审计
  • 从实践出发--探究C/C++空类的大小,真的是1吗?
  • 微店关键词搜索接口深度开发指南
  • 有关Maven的个人笔记总结
  • ssh2-sftp-client 简化 sftp 文件传输的 node库
  • python实现接收九数云的异常分析指标推送通知
  • C++基础数据结构
  • Java IO 流详解:从基础到实战,彻底掌握输入输出编程
  • A316-HF-DAC-V1:专业USB HiFi音频解码器评估板技术解析
  • 牛客网题解 | 单词识别
  • 关于Ajax的学习笔记
  • 二叉树实现堆,咕咕咕
  • 结构型模式-架构解耦与扩展实践
  • Linux的目录
  • stream event