getAttributerécupère l' attribut d'un élément DOM, tandis que el.idrécupère la propriété de cet élément DOM. Ils ne sont pas les mêmes.
La plupart du temps, les propriétés DOM sont synchronisées avec les attributs.
Cependant, la synchronisation ne garantit pas la même valeur . Un exemple classique est entre el.hrefet el.getAttribute('href')pour un élément d'ancrage.
Par exemple:
<a href="/" id="hey"></a>
<script>
var a = document.getElementById('hey')
a.getAttribute('href') // "/"
a.href // Full URL except for IE that keeps '/'
</script>
Ce comportement se produit car selon le W3C , la propriété href doit être un lien bien formé. La plupart des navigateurs respectent cette norme (devinez qui ne le fait pas?).
Il y a un autre cas pour le inputde » checkedla propriété. La propriété DOM renvoie trueou falsetandis que l'attribut renvoie la chaîne "checked"ou une chaîne vide.
Et puis, certaines propriétés ne sont synchronisées que dans un sens . Le meilleur exemple est la valuepropriété d'un inputélément. Changer sa valeur via la propriété DOM ne changera pas l'attribut (modifier: vérifiez le premier commentaire pour plus de précision).
Pour ces raisons, je vous suggère de continuer à utiliser les propriétés DOM , et non les attributs, car leur comportement diffère d'un navigateur à l'autre.
En réalité, il n'y a que deux cas où vous devez utiliser les attributs:
- Un attribut HTML personnalisé, car il n'est pas synchronisé avec une propriété DOM.
- Pour accéder à un attribut HTML intégré, qui n'est pas synchronisé à partir de la propriété, et vous êtes sûr d'avoir besoin de l'attribut (par exemple, l'original
valued'un inputélément).
Si vous souhaitez une explication plus détaillée, je vous suggère fortement de lire cette page . Cela ne vous prendra que quelques minutes, mais vous serez ravi des informations (que j'ai résumées ici).