getAttributerecupera el atributo de un elemento DOM, mientras el.idrecupera 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.hrefy 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 checkedpropiedad. La propiedad DOM devuelve trueo falsemientras 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 valuepropiedad de un inputelemento. 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
valuede un inputelemento).
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í).