Dom节点 vs 元素,两者有什么区别?

Dom节点 vs 元素,两者有什么区别?

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

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

1. DOM节点

理解节点和元素之间区别的关键是理解节点是什么。

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

看看下面的HTML文档:

nbsp;html>      My Page            

My Page

    

Thank you for visiting my web page!

  

登录后复制

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

1.png

是文档树中的一个节点。它有2个子节点:

和。

子有3个子节点的节点:注释节点  ,标题

,段落

节点的父节点是节点。

HTML文档中的标记代表一个节点,有趣的是普通文本也是一个节点。段落节点

有1个子节点:文本节点“Thank you for visiting my web page!”。

1.2节点类型

我们要如何区分这些不同类型的节点? 答案在于DOM Node接口,尤其是Node.nodeType属性。

Node.nodeType可以具有代表节点类型的以下值之一:

Node.ELEMENT_NODENode.ATTRIBUTE_NODENode.TEXT_NODENode.CDATA_SECTION_NODENode.PROCESSING_INSTRUCTION_NODENode.COMMENT_NODENode.DOCUMENT_NODENode.DOCUMENT_TYPE_NODENode.DOCUMENT_FRAGMENT_NODENode.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文档中的标记编写的节点。 ,

都是元素,因为它们由标签表示。

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

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

const paragraph = document.querySelector('p');paragraph instanceof Node;        // => trueparagraph instanceof HTMLElement; // => true

登录后复制

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

3. DOM属性:节点和元素

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

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

node.parentNode; // Node or nullnode.firstChild; // Node or nullnode.lastChild;  // Node or nullnode.childNodes; // NodeList

登录后复制

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

node.parentElement; // HTMLElement or nullnode.children;      // HTMLCollection

登录后复制

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

考虑以下包含某些文本的段落元素:

  Thank you for visiting my web page!

登录后复制

打开演示,然后查看parapgraph节点的childNodes和children属性:

const paragraph = document.querySelector('p');paragraph.childNodes; // NodeList:       [HTMLElement, Text]paragraph.children;   // HTMLCollection: [HTMLElement]

登录后复制

paragraph.childNodes集合包含2个节点: Thank you,,以及for visiting my web page!文本节点!

但是,paragraph.children集合仅包含1个项目:Thank you

由于paragraph.children仅包含元素,因此此处未包含文本节点,因为其类型是文本(Node.TEXT_NODE),而不是元素(Node.ELEMENT_NODE)。

同时拥有node.childNodes和node.children,我们可以选择要访问的子级集合:所有子级节点或仅子级是元素。

4.总结

DOM文档是节点的分层集合,每个节点可以具有父级和/或子级。如果了解节点是什么,那么了解DOM节点和元素之间的区别就很容易。

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

英文原文地址:https://dmitripautin.com/dom-node-element/作者:Shadeed来源:dmitripavlutin

更多编程相关知识,请访问:编程教学!!

以上就是Dom节点 vs 元素,两者有什么区别?的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2712923.html

(0)
上一篇 2025年3月7日 21:19:03
下一篇 2025年2月26日 08:04:57

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 用js怎么改变css样式

    方法:1、使用“对象.style.属性名=”值””;2、使用“对象.style.cssText=”属性名:值””;3、使用“对象.setAttribute(“class&#8221…

    2025年3月7日
    200
  • 详解JS应用程序中如何执行语音识别

    本篇文章给大家介绍一下在javascript应用程序中执行语音识别的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 语音识别是计算机科学和计算语言学的一个跨学科子领域。它可以识别口语并将其翻译成文本,它也被称为自动语…

    2025年3月7日 编程技术
    200
  • 一份window.location的备忘单,助你更好理解决地址路径问题!!

    本篇文章分享一份window.location的备忘单,助你更好理解决地址路径问题!!有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 如果你想获取站点的URL信息,那么window.location对象什么很适合你! 使用…

    2025年3月7日
    200
  • 聊聊JavaScript中eval()函数的用法

    本篇文章给大家介绍一下javascript中eval()函数的用法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 1. eval函数有什么用? 调用eval函数,可以将其参数作为javascript程序进行解释。换句话说…

    2025年3月7日
    200
  • 浅谈JavaScript中的事件委托

    本篇文章给大家介绍一下javascript中的事件委托。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 事件委托 利用事件冒泡,指定一个事件处理程序,管理一系列的所有事件事件委托利用DOM元素的事件冒泡,把子元素的相关事件…

    2025年3月7日 编程技术
    200
  • JavaScript中如何更好地使用数组

    本篇文章给大家介绍一下如何在 javascript 中更好地使用数组。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 本文短小精悍,我保证。在过去的数个月里,我注意到在我审阅的 pull request 中有四个(关于数组…

    2025年3月7日
    200
  • 10个让你效率更高的Math对象方法,快来收藏吧!

    本篇文章给大家介绍一下能让你事半功倍的10个math对象方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 JavaScript中的math 对让我们能够对执行一些数学操作。 它具有数学常数和函数的属性和方法。 在今天的…

    2025年3月7日
    200
  • js怎么替换html标签

    在js中,可以利用replace()函数配合正则表达式“//g”来替换html标签,语法格式“stringObject.replace(//g,”)”。replace()可以替换一个与正则表达式匹配的子串。 本教程操作环境:wi…

    2025年3月7日
    200
  • 深入解析JavaScript中的作用域

    本篇文章带大家深入理解javascript作用域。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 这篇文章称为笔记更为合适一些,内容来源于 《你不知道的JavaScript(上卷)》第一部分 作用域和闭包。讲的很不错,非常…

    2025年3月7日
    200
  • 分享12个提升程序员软技能与效率的开发工具

    本篇文章给大家推荐12个提升程序员软技能与效率的开发工具。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 大家好,我是你们的 猫哥,那个不喜欢吃鱼、又不喜欢喵 的超级猫 ~ 这一期的内容有点不一般哦,先来几个在线绘图类的工…

    2025年3月7日 编程技术
    200

发表回复

登录后才能评论