Lors de l'écriture de code source HTML, vous pouvez définir des attributs sur vos éléments HTML. Ensuite, une fois que le navigateur a analysé votre code, un nœud DOM correspondant sera créé. Ce nœud est un objet et a donc des propriétés .
Par exemple, cet élément HTML:
<input type="text" value="Name:">
a 2 attributs ( type
et value
).
Une fois que le navigateur a analysé ce code, un objet HTMLInputElement sera créé et cet objet contiendra des dizaines de propriétés telles que: accept, accessKey, align, alt, attributs, autofocus, baseURI, vérifié, childElementCount, childNodes, children, classList, className, clientHeight, etc.
Pour un objet de noeud DOM donné, les propriétés sont les propriétés de cet objet et les attributs sont les éléments de la attributes
propriété de cet objet.
Lorsqu'un nœud DOM est créé pour un élément HTML donné, bon nombre de ses propriétés se rapportent à des attributs portant des noms identiques ou similaires, mais ce n'est pas une relation un à un. Par exemple, pour cet élément HTML:
<input id="the-input" type="text" value="Name:">
le noeud DOM correspondant aura id
, type
et les value
propriétés (entre autres):
La id
propriété est une propriété reflétée pour l' id
attribut: obtenir la propriété lit la valeur d'attribut et définir la propriété écrit la valeur d'attribut. id
est une propriété reflétée pure , elle ne modifie ni ne limite la valeur.
La type
propriété est une propriété reflétée pour l' type
attribut: obtenir la propriété lit la valeur d'attribut et définir la propriété écrit la valeur d'attribut. type
n'est pas une propriété reflétée pure car elle est limitée aux valeurs connues (par exemple, les types valides d'une entrée). Si vous l'aviez <input type="foo">
, alors theInput.getAttribute("type")
vous donne "foo"
mais theInput.type
vous donne "text"
.
En revanche, la value
propriété ne reflète pas l' value
attribut. Il s'agit plutôt de la valeur actuelle de l'entrée. Lorsque l'utilisateur modifie manuellement la valeur de la zone de saisie, la value
propriété reflétera cette modification. Donc, si l'utilisateur entre "John"
dans la zone de saisie, alors:
theInput.value // returns "John"
tandis que:
theInput.getAttribute('value') // returns "Name:"
La value
propriété reflète le contenu textuel actuel à l'intérieur de la zone de saisie, tandis que l' value
attribut contient le contenu textuel initial de l' value
attribut du code source HTML.
Donc, si vous voulez savoir ce qui se trouve actuellement dans la zone de texte, lisez la propriété. Si vous voulez cependant savoir quelle était la valeur initiale de la zone de texte, lisez l'attribut. Ou vous pouvez utiliser la defaultValue
propriété, qui est un pur reflet de l' value
attribut:
theInput.value // returns "John"
theInput.getAttribute('value') // returns "Name:"
theInput.defaultValue // returns "Name:"
Il y a plusieurs propriétés qui reflètent directement leur attribut ( rel
, id
), certains sont des réflexions directes avec des noms légèrement différents ( htmlFor
reflète l' for
attribut, className
reflète l' class
attribut), beaucoup qui reflètent leur attribut , mais avec restrictions / modifications ( src
, href
, disabled
, multiple
), etc. sur. La spécification couvre les différents types de réflexion.