回答:
このtagName
プロパティは、特に要素ノード(タイプ1ノード)が要素のタイプを取得するためのものです。
他にもいくつかのタイプのノードがあります(コメント、属性、テキストなど)。さまざまなノードタイプの名前を取得するには、nodeName
プロパティを使用できます。
要素ノードnodeName
に対して使用すると、そのタグ名が取得されるため、どちらを使用してもかまいませんが、を使用するとブラウザ間の整合性が向上します。nodeName
これは、2つの違いのかなり良い説明です。
記事からの追加テキスト:
tagName
とnodeName
はどちらも、html要素の名前を確認するのに役立つJavaScriptプロパティです。ほとんどの目的ではどちらでも問題ありませんが、Aグレードのブラウザーのみをサポートする場合はnodeNameが推奨され、IE5.5もサポートする場合はtagNameが推奨されます。には2つの問題があります
tagName
。
- IEのすべてのバージョンで
!
、コメントノードで呼び出されるとtagNameが返されます- テキストノードの場合、tagNameは戻りますが
undefined
、nodeNameは戻ります#text
nodeName
独自の一連の問題がありますが、それほど深刻ではありません。
- IE 5.5は
!
、コメントノードで呼び出されると戻ります。これは 、IEのすべてのバージョンでこの動作の影響を受けるtagNameよりも害が少ない- IE 5.5は、
document
要素または属性のnodeNameをサポートしていません。これらはどちらも、ほとんどの実用的な目的では問題になりませんが、いずれにしても留意する必要があります- このプロパティを使用すると、Konquerorはコメントノードを無視します。しかし、その後、再び、IE 5.5と一緒にKonquerorは、いないA級ブラウザ
nodeName
そのため、より広範なシナリオのサポートと潜在的に優れた前方互換性により、ほとんどの実用的な目的に固執します。言うまでもなく、それはコメントノードでしゃっくりしないことは言うまでもありません。これは、未発表のコードに侵入する傾向があります。市場シェアは0%に近いため、IE 5.5やKonquerorについては心配しないでください。
これらのプロパティについては、DOM Core仕様をご覧ください。
nodeName
Nodeインターフェースで定義されたプロパティです
。http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-F68D095
tagName
Elementインターフェースで定義されたプロパティです
http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-104682815
一方、Nodeインターフェースは、DOMツリー内のすべてのノード(document
オブジェクト自体を含む)によって実装されます。Elementインターフェースは、HTMLドキュメントの要素を表すDOMツリーのノード(nodeType
=== 1のノード)によってのみ実装されます。
そして、これは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
tagName
ためにnodeType === 1
nodeName
壊れるnodeType === 1
」はどうですか?