2013-10-22 2 views
0

EDIT : 이것은 내가 물어 본 멍청한 질문입니다. 나는 너무 빨리 질문하지 말 것을 상기시키기 위해 그것을 지킬 것이다.DOM 노드가`html` 노드인지 확인하는 방법

내가 선택한 DOM 노드가 html 노드인지 어떻게 확인할 수 있습니까? 나는 그것이 일반적인 특성을 가지고 있지 않다는 것을 알아 차렸다. 예를 들어 : 특히

var div = document.getElementsByTagName('div')[0]; 
var html = document.getElementsByTagName('html'); 

div instanceof HTMLElement; // true 
html instanceof HTMLElement; // false 

div.tagName; // "DIV" 
html.tagName; // undefined 

, 나는 모든 DOM 노드 (div, span 등) 작동 검사를하고 싶습니다. 문제는 내 코드가 DOM을 크롤링하고 특정 속성을 확인한다는 것입니다. 코드가 속성을 찾을 수없는 경우, 그것은 html 노드에 도달하기 때문에이 라인의 오류가 발생합니다 : node.TagName이 정의되어 있기 때문에 node에서, html 노드 때

if (node.tagName.toUpperCase() !== 'OBJECT') { } 

이는 TypeError가 발생합니다.

미리 감사드립니다.

답변

1

변수 html은 단일 노드가 아니므로 div과 다른 이유는 무엇입니까? 당신이 div 참조를 위해 할 것처럼 누락 된 [0]을 추가하십시오!

+0

당신이 VAR을 설정하지만, 아무것도 안하고 있기 때문에 그래, 콘솔에 당신은 정의되지 않은 얻을 것이다 그것으로. 'var html = document.getElementsByTagName ('html') [0];을 시도하십시오. console.log (html);'이것은 html 노드의 확장 가능한 트리를 생성합니다. – EmmyS

2

배열에서 반환되는 첫 번째 요소 대신 getElementsByTagName이 반환됩니다. 이 시도 :

var div = document.getElementsByTagName('div')[0]; 
var html = document.getElementsByTagName('html')[0]; // notice [0] 

div instanceof HTMLElement; // true 
html instanceof HTMLElement; // true 

div.tagName; // "DIV" 
html.tagName; // "HTML" 

참고 : 크롬 개발자 도구 버전에서 테스트 30.0.1599.101 m

관련 문제