.tagNameと.nodeNameの違い


137

違いは何である$('this')[0].nodeNameとは$('this')[0].tagName


10
この質問は、jqueryに固有ではないため、domの質問に近いものです。
グレッグ

回答:


126

このtagNameプロパティは、特に要素ノード(タイプ1ノード)が要素のタイプを取得するためのものです。

他にもいくつかのタイプのノードがあります(コメント、属性、テキストなど)。さまざまなノードタイプの名前を取得するには、nodeNameプロパティを使用できます

要素ノードnodeNameに対して使用すると、そのタグ名が取得されるため、どちらを使用してもかまいませんが、を使用するとブラウザ間の整合性向上します。nodeName


45

これは、2つの違いのかなり良い説明です。


記事からの追加テキスト:

tagNamenodeNameはどちらも、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については心配しないでください。


17

これらのプロパティについては、DOM Core仕様をご覧ください。

nodeNameNodeインターフェースで定義されたプロパティです
。http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-F68D095

tagNameElementインターフェースで定義されたプロパティです
http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-104682815

一方、Nodeインターフェースは、DOMツリー内のすべてのノード(documentオブジェクト自体を含む)によって実装されます。Elementインターフェースは、HTMLドキュメントの要素を表すDOMツリーのノード(nodeType=== 1のノード)によってのみ実装されます。


4

そして、これは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

3
nodeName壊れるnodeType === 1」はどうですか?
WD40 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.