getAttribute
récupère l' attribut d'un élément DOM, tandis que el.id
ré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.href
et 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 input
de » checked
la propriété. La propriété DOM renvoie true
ou false
tandis 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 value
proprié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
value
d'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).