关于vue.js:Dom-节点和-元素-有啥区别好家伙我弄懂了

6次阅读

共计 3076 个字符,预计需要花费 8 分钟才能阅读完成。

作者:Shadeed
译者:前端小智
起源:dmitripavlutin

点赞再看 ,微信搜寻【大迁世界】,B 站关注【前端小智】 这个没有大厂背景,但有着一股向上踊跃心态人。本文 GitHub https://github.com/qq44924588… 上曾经收录,文章的已分类,也整顿了很多我的文档,和教程材料。

最近开源了一个 Vue 组件,还不够欠缺,欢送大家来一起欠缺它,也心愿大家能给个 star 反对一下,谢谢各位了。

github 地址:https://github.com/qq44924588…

文档对象模型 (DOM) 是一个将 HTML 或 XML 文档视为树形构造的接口,其中每个节点都是文档的一个对象。DOM 还提供了一组办法来查问树、扭转构造、款式。

DOM 还应用术语 元素 (Element) 它与节点十分类似。那么,DOM 节点和元素之间有什么区别呢?

1. DOM 节点

了解节点和元素之间区别的要害是了解节点是什么。

更高的角度来看,DOM 文档由节点层次结构组成。每个节点能够具备父级和 / 或子级。

看看上面的 HTML 文档:

<!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>

该文档蕴含以下节点层次结构:

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

<body>子有 3 个子节点的节点: 正文节点 <!-- Page Body -->,题目 <h2>,段落<p><body> 节点的父节点是 <html> 节点。

HTML 文档中的标记代表一个节点,乏味的是一般文本也是一个节点。段落节点 <p> 有 1 个子节点: 文本节点“Thank you for visiting my web page!”

1.2 节点类型

咱们要如何辨别这些不同类型的节点?答案在于 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 属性:

const paragraph = document.querySelector('p');

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

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

document.nodeType === Node.DOCUMENT_NODE; // => true

2. DOM 元素

把握了 DOM 节点的常识之后,当初该辨别 DOM 节点和元素了。

如果你理解节点术语,那么答案是不言而喻的: 元素是特定类型的节点 element (Node.ELEMENT_NODE),以及文档、正文、文本等类型。

简而言之,元素是应用 HTML 文档中的标记编写的节点。<html><head><title><body><h2><p>都是元素,因为它们由标签示意。

文档类型,正文,文本节点不是元素,因为它们没有应用标签编写:

Node是节点的构造函数,HTMLElement 是 JS DOM 中元素的构造函数。段落既是节点又是元素,它同时是 NodeHTMLElement的实例

const paragraph = document.querySelector('p');

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

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

3. DOM 属性:节点和元素

除了辨别节点和元素之外,还须要辨别只蕴含节点或只蕴含元素的 DOM 属性。

节点类型的以下属性评估为一个节点或节点汇合(NodeList):

node.parentNode; // Node or null

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

node.childNodes; // NodeList

然而,以下属性是元素或元素汇合(HTMLCollection):

node.parentElement; // HTMLElement or null

node.children;      // HTMLCollection

因为 node.childNodes 和 node.children 都返回子级列表,因而为什么要同时具备这两个属性?好问题!

思考以下蕴含某些文本的段落元素:

<p>
  <b>Thank you</b> for visiting my web page!
</p>

关上演示,而后查看 parapgraph 节点的 childNodeschildren属性:

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,咱们能够抉择要拜访的子级汇合:所有子级节点或仅子级是元素。

4. 总结

DOM 文档是节点的分层汇合,每个节点能够具备父级和 / 或子级。如果理解节点是什么,那么理解 DOM 节点和元素之间的区别就很容易。

节点有类型,元素类型就是其中之一,元素由 HTML 文档中的标记示意。

完~ 我是小智,我要去刷碗了,咱们下期再见!


代码部署后可能存在的 BUG 没法实时晓得,预先为了解决这些 BUG,花了大量的工夫进行 log 调试,这边顺便给大家举荐一个好用的 BUG 监控工具 Fundebug。

原文:https://dmitripautin.com/dom-…

交换

文章每周继续更新,能够微信搜寻「大迁世界」第一工夫浏览和催更(比博客早一到两篇哟),本文 GitHub https://github.com/qq449245884/xiaozhi 曾经收录,整顿了很多我的文档,欢送 Star 和欠缺,大家面试能够参照考点温习,另外关注公众号,后盾回复 福利,即可看到福利,你懂的。

正文完
 0