getAttributerecupera l' attributo di un elemento DOM, mentre el.idrecupera la proprietà di questo elemento DOM. Non sono la stessa cosa.
La maggior parte delle volte, le proprietà DOM sono sincronizzate con gli attributi.
Tuttavia, la sincronizzazione non garantisce lo stesso valore . Un classico esempio è tra el.hrefe el.getAttribute('href')per un elemento di ancoraggio.
Per esempio:
<a href="/" id="hey"></a>
<script>
var a = document.getElementById('hey')
a.getAttribute('href') // "/"
a.href // Full URL except for IE that keeps '/'
</script>
Questo comportamento si verifica perché secondo il W3C , la proprietà href deve essere un collegamento ben formato. La maggior parte dei browser rispetta questo standard (indovina chi non lo fa?).
C'è un altro caso per il input's checkedproprietà. La proprietà DOM restituisce trueo falsementre l'attributo restituisce la stringa "checked"o una stringa vuota.
E poi, ci sono alcune proprietà che sono sincronizzate solo unidirezionali . Il miglior esempio è la valueproprietà di un inputelemento. Cambiare il suo valore tramite la proprietà DOM non cambierà l'attributo (modifica: controlla il primo commento per maggiore precisione).
Per questi motivi, ti suggerirei di continuare a utilizzare le proprietà DOM e non gli attributi, poiché il loro comportamento differisce tra i browser.
In realtà, ci sono solo due casi in cui è necessario utilizzare gli attributi:
- Un attributo HTML personalizzato, perché non è sincronizzato con una proprietà DOM.
- Per accedere a un attributo HTML integrato, che non è sincronizzato dalla proprietà, e sei sicuro di aver bisogno dell'attributo (ad esempio, l'originale
valuedi un inputelemento).
Se vuoi una spiegazione più dettagliata, ti consiglio caldamente di leggere questa pagina . Ci vorranno solo pochi minuti, ma rimarrai deliziato dalle informazioni (che ho riassunto qui).