从零开始学习BOM&DOM(一)

简介: 从零开始学习BOM&DOM

84d562cc365074410cbca777a7c1f35.png

前言

ECMAScript,描述了该语言的语法和基本对象,如类型、运算、流程控制、面向对象、异常等。

文档对象模型(DOM),描述处理网页内容的方法和接口。

浏览器对象模型(BOM),描述与浏览器进行交互的方法和接口。

DOM/BOM架构

1686839770752.jpg

概述

JavaScript运行在浏览器

BOM就是连接JavaScript代码和浏览器的桥梁,而DOM就是用来操作各种标签元素的。

  • BOM包括 window、history、location、document ...
  • DOM包括 Document(整个文档)、Element(标签元素)、CharacterData(字符数据)、Attr(属性),这些元素又可以继续往下划分。
  • Document 又可以分为HTMLDocument(就是我们定义的html文件)和XMLDocument(XML文件,安卓会用,前端用不到)
  • Element 可以划分为 HTMLElement(表示 HTML 中的一个元素,比如div),HTMLElement又可以划分为HTMLDIvElement 和 HTMLImageElement 故名思义
  • CharacterData 可以划分为text(text标签)和Comment(注释)
  • Attr 可以理解我们元素的class属性id属性以及值

继承关系

  • 其中DOM元素、window对象都继承自EventTarget,所以它们都有EventTarget上的实例方法而document是HTMLDocument的实例对象
  • 所以window上是可以绑定事件,监听事件,分发事件的
  • 其中DOM 中的所有元素节点都继承自EventTarget接口,所以DOM中任意节点可以绑定事件,监听事件,分发事件

我们可以在浏览器中打印它的原型属性

通过下图我们可以看出,window继承Window,Window继承自EventTarget

1686839792267.jpg

通过下图我们可以看出,document继承HtmlDocument,HtmlDocument继承自Document,Document继承自Node节点,Node节点继承自EventTarget

1686839805648.jpg

顺便说一句:EventTarget继承自Object,Object继承自null

EventTarget 接口

EventTarget 是一个 DOM 接口,由可以接收事件、并且可以创建侦听器的对象实现。

Elementdocumentwindow 是最常见的 event targets

EventTarget有三个原型方法,在window和DOM元素上都可以使用

  • addEventListener 给元素绑定事件
  • removeEventListener 移除元素绑定的事件
  • dispatchEvent 派发事件

BOM

认识BOM

  • JavaScript有一个非常重要的运行环境就是浏览器,而且浏览器本身又作为一个应用程序需要对其本身进行操作,所以通常浏览器会有对 应的对象模型(BOM,Browser Object Model)。
  • BOM主要包括一下的对象模型:
  • window:包括全局属性、方法,控制浏览器窗口相关的属性、方法;
  • location:浏览器连接到的对象的位置(URL);
  • history:操作浏览器的历史;
  • document:当前窗口操作文档的对象;
  • window对象在浏览器中有两个身份:
  • 身份一:全局对象。我们知道ECMAScript其实是有一个全局对象的,这个全局对象在Node中是global;在浏览器中就是window对象;
  • 身份二:浏览器窗口对象。作为浏览器窗口时,提供了对浏览器操作的相关的API;

Window全局对象

在浏览器中,window对象就是之前经常提到的全局对象

  • 比如在全局通过var声明的变量,会被添加到全局环境变量中,也就是会被添加到window上;
  • 比如window默认给我们提供了全局的函数和类:setTimeout、Math、Date、Object等;
var message = 'hello'
function foo(){
    console.log("foo")
}
console.log(window.message)
window.foo()
 window.setTimeout(()=>{
     console.log('setTimout')
 })
 const obj = new window.Object()
 console.log(obj)

Window窗口对象

window是一个复杂的大对象,包含了大量的对象和方法

  • 第一:包含大量的属性,localStorage、console、location、history、screenX、scrollX等等(大概60+个属性);
  • 第二:包含大量的方法,alert、close、scrollTo、open等等(大概40+个方法);
  • 第三:包含大量的事件,focus、blur、load、hashchange等等(大概30+个事件);
  • 第四:包含从EventTarget继承过来的方法,addEventListener、removeEventListener、dispatchEvent方法;

参考地址:MDN文档:developer.mozilla.org/zh-CN/docs/…


1686839856145.jpg

1686839856145.jpg

常见的属性

// screenX和screenY属性返回窗口相对于屏幕的X和Y坐标。
console.log(window.screenX)
console.log(window.screenY)
// 监听滚动
window.addEventListener("scroll", () => {
   console.log(window.scrollX, window.scrollY)
})
// 获取窗口的宽度与高度:
console.log(window.outerHeight)
console.log(window.innerHeight)

常见的方法

const scrollBtn = document.querySelector("#scroll")
scrollBtn.onclick = function() {
    //1.scrollTo
    window.scrollTo({ top: 2000 })
    //2.close
    window.close()
    // 3.open
    window.open("http://www.baidu.com", "_self")
}

常见的事件

// 整个页面以及所有资源加载完成
window.onload = function() {
  console.log("window窗口加载完毕~")
}
window.onfocus = function() {
  console.log("window窗口获取焦点~")
}
window.onblur = function() {
  console.log("window窗口失去焦点~")
}
//hash 改变
const hashChangeBtn = document.querySelector("#hashchange")
hashChangeBtn.onclick = function() {
  location.hash = "aaaa"
}
window.onhashchange = function() {
  console.log("hash发生了改变")
}



相关文章
|
22天前
|
JavaScript 前端开发
react学习(3)创建虚拟dom的两种方式
react学习(3)创建虚拟dom的两种方式
164 67
|
6天前
|
XML 缓存 JavaScript
提升对前端的认知,不得不了解Web API的DOM和BOM
该文章强调了在前端开发中理解和掌握DOM(文档对象模型)和BOM(浏览器对象模型)的重要性,并介绍了它们的相关操作和应用。
提升对前端的认知,不得不了解Web API的DOM和BOM
|
6天前
|
XML 移动开发 JavaScript
js中BOM和DOM总结(基础篇)
文章总结了JavaScript的BOM和DOM知识点,包括window、screen、location、history、navigator对象,以及消息框、计时器和cookie。同时,介绍了DOM的概念、节点获取和修改方法,以及事件处理。
js中BOM和DOM总结(基础篇)
|
8天前
|
XML JavaScript 前端开发
学习react基础(1)_虚拟dom、diff算法、函数和class创建组件
本文介绍了React的核心概念,包括虚拟DOM、Diff算法以及如何通过函数和类创建React组件。
15 2
|
2月前
|
编解码 JavaScript 前端开发
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
58 1
|
2月前
|
JavaScript 前端开发 容器
js之dom学习
js之dom学习
30 0
|
5月前
|
XML JavaScript 前端开发
JavaScript简介&引入方式(JavaScript基础语法、JavaScript对象、BOM、DOM、事件监听)
JavaScript简介&引入方式(JavaScript基础语法、JavaScript对象、BOM、DOM、事件监听)
40 2
|
1天前
|
JavaScript
DOM 节点列表长度(Node List Length)
DOM 节点列表长度(Node List Length)
|
1天前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
XML DOM 遍历节点树
|
2天前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
XML DOM 遍历节点树
下一篇
无影云桌面