2009-09-18 4 views
4

노드 (node.previousSibling 호출에서 오는 것임)가 확실하다는 것을 알고 있습니다. 그러나 MDC에 표시된 Node constants에 액세스하는 크로스 브라우저 자바 스크립트 방법을 찾는 데 어려움을 겪고 있습니다.IE의 노드 유형 상수에 액세스하는 방법

IE가 아닌 모든 브라우저에서 Node.ELEMENT_NODE가 정의됩니다. 특정 노드 인스턴스를 사용하려고했습니다 (예 :

).
e=$("#element_id")[0]; 
alert("ELEMENT_NODE: " + ELEMENT_NODE); 

이는 IE에서도 작동하지 않습니다. 그래서 이것을 IE 방법은 무엇입니까? 노드 상수를 직접 정의해야합니까?

답변

6

Internet Explorer 8 및 이전 버전에서는 노드 유형 상수를 정의하지 않으므로 직접 정의해야합니다. 또한 Internet Explorer 7 및 이전 버전은 support types 1 and 3입니다.

+2

그게 짜증나. –

+1

MSDN은'nodeType'의 값은 1 또는 3 일 수 있다고 말할 수도 있지만 사실이 아닙니다. 'document.nodeType'는 IE 7에서 9를 반환합니다.'document.createComment ("foo"). nodeType'은 8을 반환합니다. –

1

[존재하지 않을 때] 노드 상수를 정의하는 가장 깨끗한 방법은 액세스하려고 할 때 생성 된 예외를 잡는 것입니다. Node가 존재할 때

try { 
    if (Node.ELEMENT_NODE != 1) { 
     throw true; 
    } 
} 
catch(e) { 
    document.Node = Node || {}; 
    Node.ELEMENT_NODE = 1; 
    Node.ATTRIBUTE_NODE = 2; 
    Node.TEXT_NODE  = 3; 
} 

throw true 라인 만 실행하지만 Node.ELEMENT_NODE 예상 된 값이 아니다.

+0

이것은'Node'가 정의 된대로하지 않습니다. 'Node.ELEMENT_NODE'는 정의되지 않습니다. 따라서'throw true' 라인은 확실히 끝나기 시작합니다. – Gijs

+0

@ Gijs 맞지 않습니다. 이 코드는'Node'가 정의되었지만'Node.ELEMENT_NODE'가'1'이 아닌 경우 명시 적으로 던졌습니다. –

+0

@Gijs 사과드립니다. 진술을 완전히 읽지 않았습니다. 당신이 올바른지. 논리를보다 자세히 반영하기 위해 대답을 편집했습니다. –

0
alert(oNode.nodeType) 

당신은 얻을 것이다 :

"1" for ELEMENT_NODE 
"2" for ATTRIBUTE_NODE 
"3" for TEXT_NODE 
"4" for CDATA_SECTION_NODE 
"5" for ENTITY_REFERENCE_NODE 
"6" for ENTITY_NODE 

등 ...

관련 문제