Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >DOM节点和元素之间的区别是什么?

DOM节点和元素之间的区别是什么?

作者头像
疯狂的技术宅
发布于 2021-01-28 02:44:23
发布于 2021-01-28 02:44:23
2.4K00
代码可运行
举报
文章被收录于专栏:京程一灯京程一灯
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 每日前端夜话 第469篇
// 正文共:1000 字
// 预计阅读时间:7 分钟

文档对象模型(DOM)是将 HTML 或 XML 文档视为树结构的接口,其中每个节点(node)都是文档的对象。DOM 还提供了一组用于查询树、修改结构和样式的方法。

DOM 还使用了术语 元素(element):它与节点非常相似。那么 DOM 节点和元素之间有什么区别呢?

DOM 节点

要理解它们区别,关键是理解节点是什么。

从更高的角度来看,DOM 文档是由节点层次结构组成。每个节点可以有父级或子级节点。

看一下这个 HTML 文档:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
  <head>
    <title>My Page</title>
  </head>
  <body>
    <!-- Page Body -->
    <h2>My Page</h2>
    <p id="content">Thank you for visiting my web page!</p>
  </body>
</html>

这个文档包含以下节点层次结构:

DOM节点层次结构

<html> 是文档树中的一个节点。它有2个子节点:<head><body>

<body> 是一个有 3 个子节点的节点:注释 <!-- Page Body -->,标题 <h2> 和段落 <p><body> 节点的父节点是 <html> 节点。

HTML 文档中的标签代表一个节点,常规文本也是一个节点。段落节点 <p> 有1个子节点为文本节点:"Thank you for visiting my web page!"

节点类型

那么怎样区分这些节点的类型呢?答案在于 DOM Node 接口,尤其是在 Node.nodeType 属性中。

Node.nodeType 的值可以是以下列表中的一个,这个值代表了节点的类型:

  • Node.ELEMENT_NODE
  • Node.ATTRIBUTE_NODE
  • Node.TEXT_NODE
  • Node.CDATA_SECTION_NODE
  • Node.PROCESSING_INSTRUCTION_NODE
  • Node.COMMENT_NODE
  • Node.DOCUMENT_NODE
  • Node.DOCUMENT_TYPE_NODE
  • Node.DOCUMENT_FRAGMENT_NODE
  • Node.NOTATION_NODE

这些常量指示了节点类型:例如:Node.ELEMENT_NODE 代表元素节点,Node.TEXT_NODE 代表文本节点,Node.DOCUMENT_NODE 代表文档节点等。

例如选择段落节点,然后查看其 nodeType 属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const paragraph = document.querySelector('p');

paragraph.nodeType === Node.ELEMENT_NODE; // => true

和我们想的一样,paragraph.nodeType 的值为 Node.ELEMENT_NODE,指示该段落是一个元素。

它还包含一个文本节点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const paragraph = document.querySelector('p');
const firstChild = paragraph.childNodes[0];

firstChild.nodeType === Node.TEXT_NODE; // => true

Node.DOCUMENT_NODE 类型代表整个节点的文档树:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
document.nodeType === Node.DOCUMENT_NODE; // => true

DOM元素

掌握了DOM节点的知识之后,现在该区分 DOM 节点和元素了。

如果你理解了什么事节点,那么答案很明显:元素是特定类型的节点——Node.ELEMENT_NODE以及文档、注释、文本等类型。

简单的说,元素是使用 HTML 文档中的标记编写的节点。<html><head><title><body><h2><p> 都是元素,因为它们是用标签表示的。

文档类型、注释、文本节点不是元素,因为它们不是用标签编写的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 <!DOCTYPE html><html>
  <body>
    <!-- Page Body -->    <p>
      Thank you for visiting my web page!    </p>
  </body>
</html>

节点的构造函数是 NodeHTMLElement 是 JavaScript DOM 中元素的构造函数。段落既是节点又是元素,是 NodeHTMLElement 的实例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const paragraph = document.querySelector('p');

paragraph instanceof Node;        // => true
paragraph instanceof HTMLElement; // => true

简单的说,元素是节点的子类型,就像猫是动物的子类型一样。

DOM属性:节点和元素

除了区分节点和元素外,还需要区分仅包含节点或仅包含元素的 DOM 属性。

Node 类型的以下属性被认为是一个节点或节点集合(NodeList):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
node.parentNode; // Node or null

node.firstChild; // Node or null
node.lastChild;  // Node or null

node.childNodes; // NodeList

但是,以下属性是元素或元素集合(HTMLCollection):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
node.parentElement; // HTMLElement or null

node.children;      // HTMLCollection

node.childNodesnode.children 都返回一个子列表,问题来了:为什么要存在这两个相似的属性?

先来看下面包含某些文本的段落元素:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<p>
  <b>Thank you</b> for visiting my web page!
</p>

查看 parapgraph 节点的 childNodeschildren 属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const paragraph = document.querySelector('p');

paragraph.childNodes; // NodeList:       [HTMLElement, Text]
paragraph.children;   // HTMLCollection: [HTMLElement]

paragraph.childNodes 集合包含 2 个节点:粗体元素 <b>Thank you</b>,以及文本节点for visiting my web page!

但是 paragraph.children 集合仅包含1个项目:粗体元素 <b>Thank you</b>

由于 paragraph.children 仅包含元素,所以这里没有包含文本节点,因为其类型是文本(Node.TEXT_NODE),而不是元素(Node.ELEMENT_NODE)。

同时拥有 node.childNodesnode.children,你可以选择要访问的子级集合:是所有子级节点还是只有是元素的子级。

总结

DOM 文档是节点的分层集合。每个节点可以有父级或子级。

如果了解了什么是节点,那么了解 DOM 节点和元素之间的区别就很容易。

节点具有类型,元素类型是其中之一。元素由 HTML 文档中的标签表示。

最后考考你:哪种类型的节点永远没有父节点?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端先锋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Dom 节点和 元素 有啥区别?好家伙,我弄懂了!
最近开源了一个 Vue 组件,还不够完善,欢迎大家来一起完善它,也希望大家能给个 star 支持一下,谢谢各位了。
前端小智@大迁世界
2021/01/26
1.8K0
Dom 节点和 元素 有啥区别?好家伙,我弄懂了!
DOM
DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序编程接口)。DOM描绘了一个层次变化的节点树,允许开发人员添加、移除和修改页面的某一部分。
奋飛
2019/08/15
1.5K0
获取DOM节点的方法汇总
我们都知道,当获得所有节点(如:getElementsByTagName)或者获得所有子元素(如:element.childNodes)时,实际上返回的是包含一些DOM节点的集合,这个集合要么是 HTMLCollection,要么是 NodeList,两者其实都是类数组的对象。
Chor
2019/11/07
4.3K0
DOM
DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序编程接口)。DOM描绘了一个层次变化的节点树,允许开发人员添加、移除和修改页面的某一部分。
奋飛
2021/08/30
1.5K0
DOM
JavaScript DOM基础2
DOM自身存在很多类型,比如Element类型:表示的是元素节点,再比如Text类型:表示的是文本节点。DOM也提供了一些扩展功能。 一.DOM类型 DOM基础课程中,我们了解了DOM的节点并且了解怎样查询和操作节点,而本身这些不同的节点,又有着不同的类型。 DOM类型 类型名 说明 Node 表示所有类型值的统一接口,IE不支持 Document 表示文档类型 Element 表示元素节点类型 Text 表示文本节点类型
汤高
2018/01/11
8500
前端架构师之10_JavaScript_DOM
第1级DOM(DOM Level 1,或DOM1)。为XML和HTML文档中的元素、节点、属性等提供了必备的属性和方法。结合了Netscape及微软公司开发的DHTML(动态HTML)思想。
用户9184480
2024/12/13
1060
Javascript中的DOM节点类型
var elem = document.getElementById(‘elem_id’);
宅蓝三木
2024/10/09
670
DOM 元素的循环遍历
get 方式获取的 dom 元素,仅可使用==for-in、for-of、for==循环
Krry
2020/06/10
6.5K0
DOM「建议收藏」
当创建了一个网页并把它加载到web浏览器中时,DOM就悄然而生。浏览器根据网页文档创建一个文档对象。
全栈程序员站长
2022/09/21
9700
DOM「建议收藏」
Js DOM
要创建新的 HTML 元素 (节点)需要先创建一个元素,然后在已存在的元素中添加它。
hss
2022/02/25
3.7K0
JavaScript | 笔记
Element.replaceWith()的签名接受数量可变的Node或DOMString参数。。。
yiyun
2022/04/01
1.5K0
JavaScript | 笔记
前端day13-JS(WebApi)学习笔记(attribute语法、DOM节点操作)
小技巧:如果API写的是Emement复数的形式,也就是后面加了s(Emements)那么它返回的就是一个伪数组 否则就是单个对象,一般只有id才会是单个对象,其他方式获取(标签名 类名)都是伪数组.
帅的一麻皮
2020/04/19
3.1K0
前端day13-JS(WebApi)学习笔记(attribute语法、DOM节点操作)
DOM操作
1.概述 1.1DOM DOM是JavaScript操作网页的接口,全称为“文档对象模型”(Document Object Model)。文档对象模型 (DOM) 是HTML和XML文档的编程接口。它给文档(结构树)提供了一个结构化的表述并且定义了一种方式—程序可以对结构树进行访问,以改变文档的结构,样式和内容。 浏览器会根据DOM模型,将结构化文档(比如HTML和XML)解析成一系列的节点,再由这些节点组成一个树状结构(DOM Tree)。所有的节点和最终的树状结构,都有规范的对外接口。所以,DOM可以理
小胖
2018/06/27
1.9K0
回到基础:什么是DOM及DOM操作?
文本主要介绍文档对象模型(DOM),了解什么是DOM操作,以及如何使用砶 DOM API 与 JS 中的 Web 页面进行交互。
前端小智@大迁世界
2022/06/15
9580
dom啦3
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>03-JavaScript-获取DOM元素下</title> </head> <body> <div> <h1>1</h1> <h2>2</h2> <p class="item">3</p> <p>4</p> <span>5</span> </div> <script> // 1.获取指定元素所有的子元素
贵哥的编程之路
2020/10/28
1810
JavaScript——DOM基础
文档对象模型(Document Object Model),简称DOM,是W3C组织推荐的处理可扩展标记语言(HTML或者XML)的标准接口。
岳泽以
2022/10/26
6.6K0
JavaScript——DOM基础
JavaScript 学习-28.元素与节点(HTMLCollection 和 NodeList)
前言 我们平常说的查找元素 和 节点到底有什么区别?为什么有时候返回HTMLCollection ,有时候返回NodeList? HTMLCollection 和  NodeList 的区别又是什么?带着这些问题进入本篇的学习。 节点与元素 根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点: 整个文档是一个文档节点 每个 HTML 元素是元素节点 HTML 元素内的文本是文本节点 每个 HTML 属性是属性节点 注释是注释节点 以下示例 <div id="user"> <
上海-悠悠
2022/05/30
2K0
JavaScript 学习-28.元素与节点(HTMLCollection 和 NodeList)
【收藏】JavaScript DOM操作简易速查手册
本文中简要罗列了JavaScript操作Dom的基本方法,其中包括元素查询、文档结构遍历、属性及内容操作、创建节点、插入节点及删除节点等内容。虽然JQuery更便利,但我还是喜欢用原生的API。
毛瑞
2019/05/06
1.1K0
【收藏】JavaScript DOM操作简易速查手册
节点操作
网页中的所有内容都是节点(标签、属性、文本、注释等),在DOM 中,节点使用 node 来表示。
星辰_大海
2020/09/30
1.2K0
从零开始学习DOM-BOM(二)
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情
虎妞先生
2022/10/27
2930
相关推荐
Dom 节点和 元素 有啥区别?好家伙,我弄懂了!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验