getAttribute
recupera el atributo de un elemento DOM, mientras el.id
recupera la propiedad de este elemento DOM. Ellos no son los mismos.
La mayoría de las veces, las propiedades DOM se sincronizan con atributos.
Sin embargo, la sincronización no garantiza el mismo valor . Un ejemplo clásico es entre el.href
y el.getAttribute('href')
para un elemento de anclaje.
Por ejemplo:
<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 comportamiento ocurre porque de acuerdo con el W3C , la propiedad href debe ser un enlace bien formado. La mayoría de los navegadores respetan este estándar (¿adivinen quién no?).
Hay otro caso para la input
's checked
propiedad. La propiedad DOM devuelve true
o false
mientras el atributo devuelve la cadena "checked"
o una cadena vacía.
Y luego, hay algunas propiedades que se sincronizan en un solo sentido . El mejor ejemplo es la value
propiedad de un input
elemento. Cambiar su valor a través de la propiedad DOM no cambiará el atributo (editar: verifique el primer comentario para mayor precisión).
Por estas razones, le sugiero que siga usando las propiedades DOM , y no los atributos, ya que su comportamiento difiere entre los navegadores.
En realidad, solo hay dos casos en los que necesita usar los atributos:
- Un atributo HTML personalizado, porque no está sincronizado con una propiedad DOM.
- Para acceder a un atributo HTML incorporado, que no está sincronizado desde la propiedad, y está seguro de que necesita el atributo (por ejemplo, el original
value
de un input
elemento).
Si desea una explicación más detallada, le sugiero que lea esta página . Le llevará solo unos minutos, pero estará encantado con la información (que resumí aquí).