2009-09-18 11 views
4

私は、(node.previousSiblingを呼び出している)要素であることを確認しているノードがあります。しかし、私はMDCに示されているNode constantsにアクセスするために十字ブラウザのjavascript方法を見つけるのが難しいです。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

ノード定数を定義する最もクリーンな方法は、アクセスしようとしたときに生成された例外をキャッチすることです。

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; 
} 

Nodeが存在する場合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 

等...

関連する問題