.tagName 和 .nodeName 之间的区别

2022-08-30 03:01:54

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


答案 1

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

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

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


答案 2

这是对两者之间差异的一个很好的解释。


从文章中添加的文本:

tagName并且都是用于检查 html 元素名称的有用的 Javascript 属性。对于大多数目的,任何一个都可以,但是如果您仅支持A级浏览器,则首选nodeName;如果您打算支持IE5.5,则首选tagName。nodeName

有两个问题:tagName

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

nodeName有自己的一系列问题,但它们不那么严重:

  • IE 5.5 在注释节点上调用时返回。这比tagName危害小,tagName在所有版本的IE中遭受这种行为的影响。!
  • IE 5.5 不支持元素或属性的 nodeName。对于大多数实际目的来说,这些都不应该是一个问题,但无论如何都应该牢记在心document
  • 使用此属性时,Konqueror 会忽略注释节点。但话又说回来,Konqueror和IE 5.5都不是A级浏览器。

因此,对于大多数实际目的,由于其支持更广泛的场景和潜在的更好的前向兼容性,因此可以坚持使用。更不用说它不会在注释节点上打嗝,注释节点倾向于在没有通知的情况下潜入代码。不要担心IE 5.5或Konqueror,因为它们的市场份额接近0%。nodeName