2013-01-23 13 views
5

可能性の重複:JavaScriptのDOM idを直接参照できるときにdocument.getElementByIdを使用するのはなぜですか?

<div id="layer">IM A LAYER</div> 
<script> 
    alert(layer.innerHTML); 
</script> 

この場合:私は最近、私はそのIDへの直接参照してDOMからJavaScriptの任意のオブジェクトに使用できることを発見し
IE/Chrome: are DOM tree elements global variables here?

trueですが、getElementByIdメソッドを使用するとどのような利点がありますか?

+0

'var layer =" OMG WTF "; alert(layer.innerHTML) ' –

+0

"これは、ドキュメントまたはウィンドウオブジェクトのいずれかのメンバー(またはプロジェクト内の他のライブラリコード)のいずれかのメンバーが使用した後で、要素の名前を付けないようにする必要があるという点で、 " http://stackoverflow.com/questions/3434278/ie-chrome-are-dom-tree-elements-global-variables-here?lq=1 –

答えて

7

要素が存在しない場合、DOM要素に直接アクセスするとエラーが発生します。あなたがgetElementByIdを使用する場合、それはNULLを返します。

JS変数にダッシュを含めることはできないため、たとえば名前にダッシュ(some-id)が含まれていると、すべての要素に直接アクセスすることはできません。しかし、window['some-id']でアクセスできます。

1

これは、変数名に許可された文字を含むidの場合にのみ機能します。 idの値がtext-11、またはitem-key-21の場合は動作しません。

2

は、例えば、あなたのページにあなたがwindow.layerへの参照になります

<script> 
var layer = false; // or any other assignment 
</script> 

layerと別の場所で別の前のスクリプトを持っている場合は、layer.innerHTMLは失敗します。 document.getElementByIdを使用すると、このトリッキーなエラーを回避できます。

関連する問題