[javascript] .tagName과 .nodeName의 차이점

차이점은 무엇이며 $('this')[0].nodeName그리고 $('this')[0].tagName?



답변

tagName속성요소 노드 (유형 1 노드)가 element 의 유형을 가져 오는 것을 의미합니다 .

주석, 속성, 텍스트 등 몇 가지 다른 유형의 노드 도 있습니다. 다양한 노드 유형의 이름을 얻으려면 nodeNameproperty를 사용할 수 있습니다 .

요소 노드nodeName 에 대해 사용하면 태그 이름을 얻을 수 있으므로 사용할 때 브라우저 간 일관성향상 되지만 실제로 사용할 수 있습니다 .nodeName


답변

이것은 둘 사이의 차이점에 대한 아주 좋은 설명입니다.


기사에서 텍스트를 추가했습니다.

tagName그리고 nodeNameHTML 요소의 이름을 확인하는 두 유용한 자바 스크립트 속성입니다. 대부분의 경우 A 급 브라우저 만 지원하는 경우 nodeName이 선호되지만 IE5.5도 지원하려는 경우 tagName이 선호됩니다.

두 가지 문제가 있습니다 tagName.

  • 모든 버전의 IE에서 !주석 노드에서 호출되면 tagName이 반환 됩니다.
  • 텍스트 노드의 경우 tagName이 반환되고 undefinednodeName이 반환됩니다.#text

nodeName자체 문제가 있지만 덜 심각합니다.

  • !주석 노드에서 호출되면 IE 5.5가 반환 됩니다. 이것은 모든
    버전의 IE 에서이 동작으로 고통받는 tagName보다 덜 유해합니다.
  • IE 5.5는 document요소 또는 속성에 대해 nodeName을 지원하지 않습니다 . 이들 중 어느 것도 대부분의 실제적인 목적에 대한 관심사가 아니어야하지만 어떤 경우에도 명심해야합니다.
  • Konqueror는이 속성을 사용할 때 주석 노드를 무시합니다. 그러나 Konqueror는 IE 5.5와 함께 A 등급 브라우저 가 아닙니다.

따라서 대부분의 실제 목적을 위해서는 nodeName광범위한 시나리오를 지원하고보다 나은 순방향 호환성을 유지해야합니다. 언급되지 않은 코드로 들어 올리는 경향이있는 주석 노드에서 딸꾹질하지 않는다는 것은 말할 것도 없습니다. 시장 점유율이 0 %에 가까워 IE 5.5 또는 Konqueror에 대해 걱정하지 마십시오.


답변

DOM Core 스펙에서 해당 특성에 대해 읽으십시오.

nodeName노드 인터페이스 http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-F68D095에 정의 된 특성입니다
.

tagName요소 인터페이스 http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-104682815에 정의 된 특성입니다
.

btw 노드 인터페이스는 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

답변