2012-03-16 14 views
10

Si consideri il seguente codice:html elemento id come javascript variabile

<html> 
<head></head> 
<body> 
<div id='test' class='blah'> 
    <a href='http://somesite.com/' id='someLink'>click!</a> 
</div> 
</body> 
</html> 

Così ho recentemente scoperto che questo crea un oggetto JavaScript chiamato someLink e posso per esempio ottenere il valore dell'attributo href con someLink.href. Ho provato questo negli ultimi Chrome, FF e IE e funziona.

Innanzitutto, per quanto tempo è stata utilizzata questa "funzione"? Immagino probabilmente un po ', perché ho saputo per anni che gli ID per gli elementi html su una pagina devono essere unici, e se hai più di un elemento che condivide lo stesso ID, l'ultimo sovrascrive quello precedente, e usando per esempio getElementById() restituirà l'ultimo. Ma non ho mai veramente capito perché, ma ora, guardandolo come una prospettiva "questo sta creando un oggetto", ha senso. Quindi, per quanto riguarda l'accesso diretto con l'oggetto id-name-as-javascript ... quanto tempo è passato? Era IE6? In precedenza?

2 ° ... Immagino che questo sia più un punto di discussione che una domanda, ma ... IMO questo non sembra un ottimo "elemento" per avere ... Non è il punto di avere un DOM e un wrapper funzionano come getElementById(), per dare qualche organizzazione e, cosa più importante, ridurre i problemi di namespace? Non credo dovrei essere preoccupato per gli elementi HTML casuali su una pagina che sovrascrivono le mie variabili javascript (qualcosa che è accaduto di recente, ed è per questo che ho scoperto questa "caratteristica"). Qualcuno sa perché questo è così com'è, qual è la logica dietro di esso?

+0

"Ho saputo per anni che gli ID per gli elementi html su una pagina devono essere unici e se si dispone di più di un elemento che condivide lo stesso ID, l'ultimo sovrascrive quello precedente e utilizza per esempio getElementById() restituirà l'ultimo "Per quanto ne so,' getElementById() 'restituirà il ** primo **, non l'ultimo, elemento che ha l'ID dato; anche se non è assolutamente coerente (o, almeno, non si dovrebbe fare affidamento sulla coerenza). –

+6

Colpisci l'unghia sulla testa con il tuo secondo punto. Non * è * una buona caratteristica, ed è per questo motivo che è stata deprecata da sempre e non funzionerà se si sta usando la direttiva '' use strict ''. – zzzzBov

risposta

9

Innanzitutto, per quanto tempo è stata utilizzata questa "funzione"?

Si tratta di un Microsoft-ismo che è apparso attorno a IE 4 se non ricordo male.

Alcuni altri browser hanno aggiunto il supporto per esso nel tentativo di essere compatibile con il codice scritto male che dipende da esso. Alcuni possono supportarlo solo in quirks mode.

questo non sembrare una cosa molto buona "funzione" per avere

corretta. Non usarlo :)

3

Sì, è stato intorno per un tempo molto lungo, che è probabilmente l'unica ragione per cui esiste. La rimozione di tale "funzionalità" interromperà la compatibilità con i siti Web esistenti, che i fornitori di browser sono molto riluttanti a fare.

Hai ragione nel dire che non è una buona idea. È un'idea profondamente negativa e può portare a conflitti di denominazione e all'inquinamento non necessario dello spazio dei nomi globale.

+0

Penso che la "funzionalità" sia rimossa in '" usa la modalità strict ''. –

+1

@Rocket: '" use strict "' è una funzione ECMAScript e non influenza il comportamento del DOM. –

Problemi correlati