从零开始学习DOM-BOM(二)(上)

简介: 从零开始学习DOM-BOM(二)

730985f093e7e9a918e1d0475b5731f.png

接上篇:

[从零开始学习DOM-BOM(一)

第一篇主要分享了BOM对象的内容,今天起床之后继续更新DOM对象内容。

前言

我们都知道,Javascript是由ECMAScript,DOM,BOM组成的。但是很多开发小伙伴对DOM,BOM缺乏一个系统的认识,今天这篇文章主要讲述DOM和BOM的体系化知识。

ECMAScript,描述了该语言的语法和基本对象,如类型、运算、流程控制、面向对象、异常等。 文档对象模型(DOM),描述处理网页内容的方法和接口。 浏览器对象模型(BOM),描述与浏览器进行交互的方法和接口。

DOM

概述


浏览器是用来展示网页的,而网页中最重要的就是里面各种的标签元素,JavaScript很多时候是需要操作这些元素的。

  • JavaScript如何操作元素呢?通过Document Object Model(DOM,文档对象模型)。
  • DOM给我们提供了一系列的模型和对象,让我们可以方便的来操作Web页面。

DOM的基本思想是把结构化文档(比如HTML和XML)解析成一系列的节点,再由这些节点组成一个树状结构(DOM Tree)

严格地说,DOM不属于JavaScript,但是操作DOM是JavaScript最常见的任务,而JavaScript也是最常用于DOM操作的语言。

所以,DOM往往放在JavaScript里面介绍。

DOM 主要节点类型


Document,  ELement,  Attr,  Text ,Comment

EventTarget节点


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

Elementdocumentwindow 是最常见的 event targets

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

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

给window对象绑定 "click" 点击事件

document.addEventListener("click", () => {
  console.log("document被点击")
})
const divEl = document.querySelector("#box")
const spanEl = document.querySelector(".content")
divEl.addEventListener("click", () => {
  console.log("div元素被点击")
})
spanEl.addEventListener("click", () => {
  console.log("span元素被点击")
})

Node节点


所有的DOM节点类型都继承自Node接口。

概述

DOM的最小组成单位叫做节点(node),一个文档的树形结构(DOM树),就是由各种不同类型的节点组成。

Node是一个接口,各种类型的 DOM API 对象会从这个接口继承。

对于HTML文档,节点主要有以下六种类型:Document节点、DocumentType节点、Element节点、Attribute节点、Text节点和DocumentFragment节点。


分类

节点 名称 含义
Document 文档节点 整个文档(window.document)
DocumentType 文档类型节点 文档的类型(比如 'DOCTYPE html')
Element 元素节点 HTML元素(比如body、a等
Attribute 属性节点 HTML元素的属性(比如class="right")
Text 文本节点 HTML文档中出现的文本
DocumentFragment 文档碎片节点 文档的片段

常用属性

Node 有几个非常用且重要的属性

  • nodeName:node节点的名称;
  • nodeType:可以区分节点的类型;
  • nodeValue:node节点的值;
  • childNodes:所有的子节点;

NodeType具体的枚举值可以参考MDN链接

我觉得我们日常开发不用掌握这些,也不用刻意去背记

理解Vue,react模版编译的时候会用到,碰到一些节点枚举值的时候,查文档就好

现在只是建立一个系统的认识。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="box">
    <span>span元素</span>
    <strong></strong>
    <a href="#"></a>
  </div>
  <div></div>
  <h2 name="title">标题</h2>
  <button>切换标题</button>
  <script>
      const divEl = document.querySelector("#box")
      const spanEl = document.querySelector(".content")
      // 常见的属性
      console.log(divEl.nodeName, spanEl.nodeName)
      // DIV SPAN
      console.log(divEl.nodeType, spanEl.nodeType)
      // 1 1
      console.log(divEl.nodeValue, spanEl.nodeValue)
      // null null
      // childNodes
      const spanChildNodes = spanEl.childNodes
      const textNode = spanChildNodes[0]
      console.log(textNode.nodeValue)
      // span元素
      // 常见的方法
      const strongEl = document.createElement("strong")
      strongEl.textContent = "我是strong元素"
      divEl.appendChild(strongEl)
  </script>
</body>
</html>

Document节点


Document节点表示的整个载入的网页,我们来看一下常见的属性和方法:

详细文档可参考MDN

我们只选择重点内容和大家分享

常见属性

  • document.body 返回文档的body元素
  • document.title 返回当前文档的标题
  • document.head 返回当前文档的head内容
  • document.children[0] 返回当前文档html内容
console.log(document.body)
console.log(document.title)
document.title = "Hello World"
console.log(document.head)
console.log(document.children[0])
console.log(window.location)
console.log(document.location)
console.log(window.location === document.location)

常见方法

  • 创建元素
  • 获取标签标签
// 创建元素
const imageEl = document.createElement("img")
const imageEl2 = new HTMLImageElement()
// 获取元素
const divEl1 = document.getElementById("box")
const divEl2 = document.getElementsByTagName("div")
const divEl3 = document.getElementsByName("title")
const divEl4 = document.querySelector(".content")
const divEl5 = document.querySelectorAll(".content")
相关文章
|
8天前
|
XML 消息中间件 JavaScript
从0开始学习JavaScript--JavaScript DOM操作与事件处理
在前端开发中,DOM(文档对象模型)是一个至关重要的概念,它为JavaScript提供了一种与HTML和XML文档交互的方法。本文将深入探讨DOM的概念与作用,以及JavaScript与DOM之间的密切关系。
|
7月前
|
缓存 JavaScript 前端开发
【Vue2.0源码学习】虚拟DOM篇-Vue中的虚拟DOM
【Vue2.0源码学习】虚拟DOM篇-Vue中的虚拟DOM
33 0
|
8天前
|
XML 存储 JavaScript
深入学习 XML 解析器及 DOM 操作技术
所有主要的浏览器都内置了一个XML解析器,用于访问和操作XML XML 解析器 在访问XML文档之前,必须将其加载到XML DOM对象中 所有现代浏览器都有一个内置的XML解析器,可以将文本转换为XML DOM对象
82 0
|
8天前
|
JavaScript 前端开发
【React学习】—虚拟DOM两种创建方式(二)
【React学习】—虚拟DOM两种创建方式(二)
|
7月前
|
JavaScript 算法
【Vue2.0源码学习】虚拟DOM篇-Vue中的DOM-优化更新子节点
【Vue2.0源码学习】虚拟DOM篇-Vue中的DOM-优化更新子节点
34 0
|
7月前
|
JavaScript 算法
【Vue2.0源码学习】虚拟DOM篇-Vue中的DOM-更新子节点
【Vue2.0源码学习】虚拟DOM篇-Vue中的DOM-更新子节点
34 0
|
7月前
|
JavaScript 算法
【Vue2.0源码学习】虚拟DOM篇-Vue中的DOM-Diff
【Vue2.0源码学习】虚拟DOM篇-Vue中的DOM-Diff
20 0
|
11月前
|
XML 移动开发 JavaScript
从零开始学习BOM&DOM(三)
从零开始学习BOM&DOM
59 0
|
11月前
|
XML 缓存 JavaScript
从零开始学习BOM&DOM(二)
从零开始学习BOM&DOM
35 0
|
11月前
|
XML JavaScript 前端开发
从零开始学习BOM&DOM(一)
从零开始学习BOM&DOM
56 0