getAttribute
recupera o atributo de um elemento DOM, enquanto el.id
recupera a propriedade deste elemento DOM. Eles não são os mesmos.
Na maioria das vezes, as propriedades DOM são sincronizadas com atributos.
Porém, a sincronização não garante o mesmo valor . Um exemplo clássico é entre el.href
e el.getAttribute('href')
para um elemento âncora.
Por exemplo:
<a href="/" id="hey"></a>
<script>
var a = document.getElementById('hey')
a.getAttribute('href') // "/"
a.href // Full URL except for IE that keeps '/'
</script>
Este comportamento ocorre porque de acordo com o W3C , a propriedade href deve ser um link bem formado. A maioria dos navegadores respeita esse padrão (adivinhe quem não?).
Há um outro caso para o input
's checked
propriedade. A propriedade DOM retorna true
ou false
enquanto o atributo retorna a string "checked"
ou uma string vazia.
E então, existem algumas propriedades que são sincronizadas unilateralmente apenas . O melhor exemplo é a value
propriedade de um input
elemento. Alterar seu valor por meio da propriedade DOM não alterará o atributo (editar: verifique o primeiro comentário para obter mais precisão).
Por esses motivos, sugiro que você continue usando as propriedades DOM , e não os atributos, pois seu comportamento difere entre os navegadores.
Na realidade, existem apenas dois casos em que você precisa usar os atributos:
- Um atributo HTML personalizado, porque não é sincronizado com uma propriedade DOM.
- Para acessar um atributo HTML embutido, que não é sincronizado da propriedade, e você tem certeza de que precisa do atributo (por exemplo, o original
value
de um input
elemento).
Se você quiser uma explicação mais detalhada, eu sugiro fortemente que você leia esta página . Demorará apenas alguns minutos, mas ficará encantado com as informações (que resumi aqui).