tagName 与 nodeName

这两个概念,相信各位前端同学肯定都是比较清楚的,在JavaScript的开发中常常会用到,之前我一般都是用tagName,后来发现nodeName也能有一样的效果,但是他们直接的区别一直都不清楚,知道昨天看见了篇文章,讲得很清楚,因此就在这里翻译过来,也算加上自己的印象吧。

原文地址:http://aleembawany.com/2009/02/11/tagname-vs-nodename/

作者:Aleem Bawany

在JavaScript中检查HTML元素的名字,常常都要用到tagName和nodeName。通常情况下,两者都能达到同样的作用。如果你只支持A-grade浏览器的话,nodeName是一个更好的选择,但如果是你同样需要支持IE 5.5的话,那tagName却是更好的选择。

这里说一下tagName的两个问题:

  1. 在所有的IE浏览器中,一个注释节点(comment node)的tagName,总是会返回“!”。
  2. 对于文字节点(text node),tagName总是返回undefined,然而nodeName却返回“#text”。

但是nodeName也有自己的问题,但是影响不大:

  1. IE 5.5中,注释节点(comment node)的nodeName总是返回“!”,但它要比tagName好一些,因为nodeName只有在IE 5.5中,注释节点才会返回“!”,而其他版本IE均正常。
  2. IE 5.5中的文档元素(document element)以及属性节点(attribute node)的nodeName都失效。通常情况下,这些都不会造成什么问题,但是自己心里一定要有谱。
  3. Konqueror浏览器中使用nodeName的时候会自动忽略掉注释节点(comment node)。但是同样的,Konqueror和IE 5.5都不是A-grade浏览器

所以对于普通的JavaScript开发,还是应该坚持使用nodeName,因为它支持更广阔的应用场景,同时也有更好的向前兼容性。想想也知道,大家并不会因为它对于注释节点(comment node)的兼容性问题就放弃使用nodeName,相反,根本不用担心IE 5.5和Konqueror,因为他们的市场占用率都快趋近于0了。

Leave a Reply

:wink: :twisted: :surprised: :smile: :sad: :rolleyes: :redface: :razz: :question: :neutral: :mrgreen: :mad: :lol: :idea: :exclaim: :evil: :eek: :cry: :cool: :confused: :biggrin: :arrow: