2013-01-23 17 views
5

Eventuali duplicati:
IE/Chrome: are DOM tree elements global variables here?Perché utilizzare document.getElementById quando posso fare direttamente riferimento all'ID DOM in JavaScript?

recente ho scoperto che posso utilizzare in JavaScript qualsiasi oggetto da DOM con un riferimento diretto alla sua ID:

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

Se questo è vero, quale vantaggio otterrei usando il metodo getElementById?

+0

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

+0

" Questo è doppiamente cattivo in quanto ora devi evitare di nominare i tuoi elementi dopo che un membro del documento o dell'oggetto della finestra tu (o qualsiasi altro codice libreria nel tuo progetto) potrebbero voler usare. " http://stackoverflow.com/questions/3434278/ie-chrome-are-dom-tree-elements-global-variables-here?lq=1 –

risposta

7

L'accesso diretto a un elemento DOM genera un errore se l'elemento non esiste. Considerando che se si utilizza getElementById restituirà NULL.

Non è inoltre possibile accedere direttamente a tutti gli elementi se, ad esempio, presentano dei trattini nel nome (some-id), poiché le variabili JS non possono contenere trattini. Puoi comunque accedere a window['some-id'].

1

Funzionerà solo per le lettere contenenti id consentite per nomi di variabili. Per ID come text-11 o item-key-21 non funzionerà.

2

ad esempio, se nella tua pagina avete altrove un altro script precedente, con

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

layer sarà un riferimento a window.layer, poi layer.innerHTML avrà esito negativo. Con document.getElementById eviterete questi errori ingannevoli