首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.tagName与.nodeName的区别

.tagName与.nodeName的区别
EN

Stack Overflow用户
提问于 2011-02-02 18:45:07
回答 4查看 55.2K关注 0票数 151

$('this')[0].nodeName$('this')[0].tagName有什么区别?

EN

回答 4

Stack Overflow用户

发布于 2011-02-02 19:34:30

属性专门用于元素节点(类型1节点),以获取元素的类型。

还有几个其他类型的节点 (注释、属性、文本等)。要获取任何不同节点类型的名称,可以使用属性

当对一个元素节点使用nodeName时,您将得到它的标记名,因此可以真正使用其中之一,尽管在使用nodeName时会得到浏览器之间更好的一致性

票数 140
EN

Stack Overflow用户

发布于 2011-02-02 18:49:11

很好地解释了两者之间的区别。

增加本条案文:

tagNamenodeName都是检查html元素名称的有用的Javascript属性。在大多数情况下,这两种方法都很好,但如果您只支持A级浏览器,则最好使用nodeName,如果您也打算支持IE5.5,则更倾向于使用tagName。 tagName有两个问题:

  • 在所有版本的IE中,tagName在对注释节点调用时返回!
  • 对于文本节点,tagName返回undefined,而nodeName返回#text

nodeName有自己的一组问题,但它们不太严重:

  • 在对注释节点调用时,IE5.5返回!。这比所有版本的IE都遭受这种行为的tagName危害小。
  • IE5.5不支持nodeName的document元素或属性。这两种情况都不应在大多数实际目的中引起关注,但无论如何都应牢记在心。
  • 当使用此属性时,Konqueror将忽略注释节点。但是,康克勒尔和IE5.5都不是A级浏览器

因此,就大多数实际目的而言,由于nodeName支持更广泛的场景和潜在的更好的前向兼容性,所以坚持使用它。更别提它不会在注释节点上打嗝,因为注释节点可能会不知不觉地进入代码中。不要担心IE5.5或Konqueror,因为他们的市场份额接近0%。

票数 52
EN

Stack Overflow用户

发布于 2011-02-02 19:47:56

在DOM规范中了解这些属性。

nodeName是在节点接口中定义的属性。

http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-F68D095

tagName是在元素接口中定义的属性。

http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-104682815

顺便说一下,节点接口是由DOM树中的每个节点(包括document对象本身)实现的。元素接口仅由DOM树中表示HTML中的元素的节点(具有nodeType === 1的节点)实现。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4878484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档