차이점은 무엇이며 $('this')[0].nodeName
그리고 $('this')[0].tagName
?
답변
이 tagName
속성 은 요소 노드 (유형 1 노드)가 element 의 유형을 가져 오는 것을 의미합니다 .
주석, 속성, 텍스트 등 몇 가지 다른 유형의 노드 도 있습니다. 다양한 노드 유형의 이름을 얻으려면 nodeName
property를 사용할 수 있습니다 .
요소 노드nodeName
에 대해 사용하면 태그 이름을 얻을 수 있으므로 사용할 때 브라우저 간 일관성 이 향상 되지만 실제로 사용할 수 있습니다 .nodeName
답변
이것은 둘 사이의 차이점에 대한 아주 좋은 설명입니다.
기사에서 텍스트를 추가했습니다.
tagName
그리고nodeName
HTML 요소의 이름을 확인하는 두 유용한 자바 스크립트 속성입니다. 대부분의 경우 A 급 브라우저 만 지원하는 경우 nodeName이 선호되지만 IE5.5도 지원하려는 경우 tagName이 선호됩니다.두 가지 문제가 있습니다
tagName
.
- 모든 버전의 IE에서
!
주석 노드에서 호출되면 tagName이 반환 됩니다.- 텍스트 노드의 경우 tagName이 반환되고
undefined
nodeName이 반환됩니다.#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