2013-01-23 2 views
5

Mögliche Duplizieren:
IE/Chrome: are DOM tree elements global variables here?Warum document.getElementById verwenden, wenn ich direkt auf die DOM-ID in JavaScript verweisen kann?

Ich habe kürzlich entdeckt, dass ich in JavaScript jedes Objekt von DOM mit einem direkten Bezug auf seine ID verwenden:

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

Wenn diese ist wahr, welchen Vorteil würde ich mit der Methode getElementById bekommen?

+0

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

+0

" Dies ist doppelt schlimm, da Sie jetzt vermeiden müssen, Ihre Elemente nach irgendeinem Mitglied des Dokuments oder des Fensterobjekts zu benennen, das Sie (oder irgendein anderer Bibliothekscode in Ihrem Projekt) benutzen möchten. " http://stackoverflow.com/questions/3434278/ie-chrome-are-dom-tree-elements-global-variables-here?lq=1 –

Antwort

7

Wenn Sie direkt auf ein DOM-Element zugreifen, erhalten Sie einen Fehler, wenn das Element nicht existiert. Wenn Sie getElementById verwenden, wird NULL zurückgegeben.

Sie können auch nicht direkt auf alle Elemente zugreifen, wenn sie beispielsweise Bindestriche in ihrem Namen haben (some-id), da JS-Variablen keine Bindestriche enthalten können. Sie könnten jedoch auf diese mit window['some-id'] zugreifen.

1

Dies funktioniert nur für id 's enthält Buchstaben für Variablennamen erlaubt. Für IDs wie text-11 oder item-key-21 wird es nicht funktionieren.

2

zum Beispiel, wenn in Ihrer Seite, die Sie an anderer Stelle eine andere vorherige Skript mit

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

layer wird ein Verweis auf window.layer sein, dann wird layer.innerHTML scheitern. Mit document.getElementById vermeiden Sie diese kniffligen Fehler

Verwandte Themen