$('this')[0].nodeName
とはどう違い$('this')[0].tagName
ますか?
4 に答える
tagName
プロパティは、elementノード(タイプ 1 ノード) がelementのタイプを取得するためのものです。
他にもいくつかのタイプのノードがあります (コメント、属性、テキストなど)。さまざまなノード タイプの名前を取得するには、nodeName
プロパティを使用できます。
要素 nodenodeName
に対して使用すると、そのタグ名が取得されるため、実際にはどちらを使用してもかまいませんが、使用するとブラウザー間の一貫性が向上します。nodeName
これは、両者の違いをよく説明しています。
記事から追加されたテキスト:
tagName
とnodeName
は両方とも、html 要素の名前をチェックするための便利な Javascript プロパティです。ほとんどの場合、どちらでも問題ありませんが、A グレードのブラウザーのみをサポートする場合は nodeName が優先され、IE5.5 もサポートする場合は tagName が優先されます。には次の 2 つの問題があります
tagName
。
!
IE のすべてのバージョンで、コメント ノードで呼び出されたときに tagName が返されます。- テキスト ノードの場合、tagName は返されますが
undefined
、nodeName は返されます。#text
nodeName
独自の問題がありますが、それほど深刻ではありません。
- IE 5.5 は
!
、コメント ノードで呼び出されると戻ります。これは、IE のすべての バージョンでこの動作に苦しむ tagName よりも害が少ないです。document
IE 5.5 は、要素または属性の nodeName をサポートしていません。これらのどちらも、ほとんどの実用的な目的では問題になるべきではありませんが、いずれにせよ心に留めておく必要があります- このプロパティを使用する場合、Konqueror はコメント ノードを無視します。しかし、繰り返しになりますが、Konqueror と IE 5.5 はA グレードのブラウザーではありません。
nodeName
そのため、より幅広いシナリオをサポートし、前方互換性が向上する可能性があるため、ほとんどの実用的な目的で に固執します。予告なしにコードに忍び寄る傾向があるコメントノードで問題が発生しないことは言うまでもありません。IE 5.5 や Konqueror の市場シェアは 0% に近いため、心配する必要はありません。
これらのプロパティについては、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>
J:
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