2011-02-02 97 views

回答

34

This對兩者之間的區別是一個很好的解釋。從文章


添加文字:

tagNamenodeName都是有用的JavaScript屬性 檢查HTML元素的名稱。對於大多數用途,如果您僅支持A級 瀏覽器,並且如果您打算支持IE5.5作爲 ,則首選 會更好,但nodeName是首選。

有兩個問題與tagName

  • 在IE瀏覽器的所有版本,註釋節點
  • 對於文本節點上調用時的tagName返回!,標籤名返回undefined而節點名稱返回#text

nodeName有自己的一套issues,但它們不太嚴重:

  • 在註釋節點上調用時,IE 5.5返回!。這比起在之間遭遇此行爲的tagName危害更小全部 版本的IE
  • IE 5.5不支持document元素的nodeName或屬性。這兩者都不應該成爲大多數實用的問題,但在任何情況下都應牢記
  • 當使用此屬性時,Konqueror會忽略註釋節點。但話又說回來,Konqueror中,與IE 5.5一起不是A-grade browser

所以最實用的目的堅守nodeName由於其支持 範圍更廣的情景和潛在的更好的向前兼容性 。更不用說,它不會在評論 節點上打嗝,這有一種傾向於未經宣佈的代碼。因爲它們的市場份額接近0%,所以不要擔心關於IE 5.5或Konqueror的 。

+4

你複製它的好東西,因爲該網站現在已經死了。 – 2016-07-08 10:49:10

2

而且這是在Firefox 33和Chrome 38會發生什麼:

HTML:

<div class="a">a</div> 

JS:

node = e 
node.nodeType === 1 
node.nodeName === 'DIV' 
node.tagName === 'DIV' 

node = e.getAttributeNode('class') 
node.nodeType === 2 
node.nodeName === 'class' 
node.tagName === undefined 

node = e.childNodes[0] 
node.nodeType === 3 
node.nodeName === '#text' 
node.tagName === undefined 

所以:

  • 只使用nodeType來獲取節點類型:nodeName打破了nodeType === 1
  • 只使用tagNamenodeType === 1
相關問題