148

$('this')[0].nodeNameとはどう違い$('this')[0].tagNameますか?

4

4 に答える 4

137

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

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

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

于 2011-02-02T19:34:30.943 に答える
51

これは、両者の違いをよく説明しています。


記事から追加されたテキスト:

tagNamenodeNameは両方とも、html 要素の名前をチェックするための便利な Javascript プロパティです。ほとんどの場合、どちらでも問題ありませんが、A グレードのブラウザーのみをサポートする場合は nodeName が優先され、IE5.5 もサポートする場合は tagName が優先されます。

には次の 2 つの問題がありますtagName

  • !IE のすべてのバージョンで、コメント ノードで呼び出されたときに tagName が返されます。
  • テキスト ノードの場合、tagName は返されますがundefined、nodeName は返されます。#text

nodeName独自の問題がありますが、それほど深刻ではありません。

  • IE 5.5 は!、コメント ノードで呼び出されると戻ります。これは、IE のすべての バージョンでこの動作に苦しむ tagName よりも害が少ないです。
  • documentIE 5.5 は、要素または属性の nodeName をサポートしていません。これらのどちらも、ほとんどの実用的な目的では問題になるべきではありませんが、いずれにせよ心に留めておく必要があります
  • このプロパティを使用する場合、Konqueror はコメント ノードを無視します。しかし、繰り返しになりますが、Konqueror と IE 5.5 はA グレードのブラウザーではありません。

nodeNameそのため、より幅広いシナリオをサポートし、前方互換性が向上する可能性があるため、ほとんどの実用的な目的で に固執します。予告なしにコードに忍び寄る傾向があるコメントノードで問題が発生しないことは言うまでもありません。IE 5.5 や Konqueror の市場シェアは 0% に近いため、心配する必要はありません。

于 2011-02-02T18:49:11.713 に答える
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 のノード) によってのみ実装されます。

于 2011-02-02T19:47:56.027 に答える
7

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
于 2014-11-17T07:34:37.870 に答える