Quando si scrive il codice sorgente HTML, è possibile definire gli attributi sugli elementi HTML. Quindi, una volta che il browser analizza il codice, verrà creato un nodo DOM corrispondente. Questo nodo è un oggetto e quindi ha proprietà .
Ad esempio, questo elemento HTML:
<input type="text" value="Name:">
ha 2 attributi ( typee value).
Una volta che il browser analizza questo codice, verrà creato un oggetto HTMLInputElement e questo oggetto conterrà dozzine di proprietà come: accetta, accessKey, align, alt, attributi, autofocus, baseURI, controllato, childElementCount, childNodes, children, classList, className, clientHeight, ecc.
Per un determinato oggetto nodo DOM, le proprietà sono le proprietà di quell'oggetto e gli attributi sono gli elementi della attributesproprietà di quell'oggetto.
Quando viene creato un nodo DOM per un determinato elemento HTML, molte delle sue proprietà si riferiscono ad attributi con nomi uguali o simili, ma non è una relazione uno a uno. Ad esempio, per questo elemento HTML:
<input id="the-input" type="text" value="Name:">
il nodo DOM corrispondente avrà id, typee valueproprietà (tra gli altri):
La idproprietà è una proprietà riflessa per l' idattributo: ottenere la proprietà legge il valore dell'attributo e l'impostazione della proprietà scrive il valore dell'attributo. idè una proprietà riflessa pura , non modifica o limita il valore.
La typeproprietà è una proprietà riflessa per l' typeattributo: ottenere la proprietà legge il valore dell'attributo e l'impostazione della proprietà scrive il valore dell'attributo. typenon è una proprietà riflessa pura perché è limitata a valori noti (ad esempio, i tipi validi di un input). Se hai avuto <input type="foo">, allora theInput.getAttribute("type")ti dà "foo"ma theInput.typeti dà "text".
Al contrario, la valueproprietà non riflette l' valueattributo. Invece, è il valore corrente dell'input. Quando l'utente modifica manualmente il valore della casella di input, la valueproprietà rifletterà questa modifica. Quindi, se l'utente immette "John"nella casella di input, quindi:
theInput.value // returns "John"
mentre:
theInput.getAttribute('value') // returns "Name:"
La valueproprietà riflette il contenuto di testo corrente all'interno della casella di input, mentre l' valueattributo contiene il contenuto di testo inizialevalue dell'attributo dal codice sorgente HTML.
Quindi, se vuoi sapere cosa c'è attualmente nella casella di testo, leggi la proprietà. Se, tuttavia, vuoi sapere qual era il valore iniziale della casella di testo, leggi l'attributo. Oppure puoi usare la defaultValueproprietà, che è un puro riflesso valuedell'attributo:
theInput.value // returns "John"
theInput.getAttribute('value') // returns "Name:"
theInput.defaultValue // returns "Name:"
Ci sono diverse proprietà che riflettono direttamente il loro attributo ( rel, id), alcuni sono riflessi diretti con nomi leggermente diversi ( htmlForriflette la fordell'attributo, classNameriflette l' classattributo), molti che riflettono il loro attributo, ma con restrizioni / modifiche ( src, href, disabled, multiple), e così su. Le specifiche riguardano i vari tipi di riflessione.