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 ( type
e 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 attributes
proprietà 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
, type
e value
proprietà (tra gli altri):
La id
proprietà è una proprietà riflessa per l' id
attributo: 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 type
proprietà è una proprietà riflessa per l' type
attributo: ottenere la proprietà legge il valore dell'attributo e l'impostazione della proprietà scrive il valore dell'attributo. type
non è 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.type
ti dà "text"
.
Al contrario, la value
proprietà non riflette l' value
attributo. Invece, è il valore corrente dell'input. Quando l'utente modifica manualmente il valore della casella di input, la value
proprietà 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 value
proprietà riflette il contenuto di testo corrente all'interno della casella di input, mentre l' value
attributo 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 defaultValue
proprietà, che è un puro riflesso value
dell'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 ( htmlFor
riflette la for
dell'attributo, className
riflette l' class
attributo), 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.