Al escribir código fuente HTML, puede definir atributos en sus elementos HTML. Luego, una vez que el navegador analiza su código, se creará un nodo DOM correspondiente. Este nodo es un objeto y, por lo tanto, tiene propiedades .
Por ejemplo, este elemento HTML:
<input type="text" value="Name:">
tiene 2 atributos ( type
y value
).
Una vez que el navegador analiza este código, se creará un objeto HTMLInputElement , y este objeto contendrá docenas de propiedades como: aceptar, accessKey, alinear, alt, atributos, enfoque automático, baseURI, marcado, childElementCount, childNodes, children, classList, className, altura del cliente, etc.
Para un objeto de nodo DOM dado, las propiedades son las propiedades de ese objeto y los atributos son los elementos de la attributes
propiedad de ese objeto.
Cuando se crea un nodo DOM para un elemento HTML dado, muchas de sus propiedades se relacionan con atributos con el mismo nombre o nombres similares, pero no es una relación uno a uno. Por ejemplo, para este elemento HTML:
<input id="the-input" type="text" value="Name:">
el nodo DOM correspondiente tendrá id
, type
y value
propiedades (entre otros):
La id
propiedad es una propiedad reflejada para el id
atributo: obtener la propiedad lee el valor del atributo y establecer la propiedad escribe el valor del atributo. id
es una propiedad puramente reflejada, no modifica ni limita el valor.
La type
propiedad es una propiedad reflejada para el type
atributo: obtener la propiedad lee el valor del atributo y establecer la propiedad escribe el valor del atributo. type
no es una propiedad reflejada pura porque está limitada a valores conocidos (por ejemplo, los tipos válidos de una entrada). Si lo tuvieras <input type="foo">
, entonces theInput.getAttribute("type")
te da "foo"
pero theInput.type
te da "text"
.
Por el contrario, la value
propiedad no refleja el value
atributo. En cambio, es el valor actual de la entrada. Cuando el usuario cambia manualmente el valor del cuadro de entrada, la value
propiedad reflejará este cambio. Entonces, si el usuario ingresa "John"
en el cuadro de entrada, entonces:
theInput.value // returns "John"
mientras:
theInput.getAttribute('value') // returns "Name:"
La value
propiedad refleja el contenido de texto actual dentro del cuadro de entrada, mientras que el value
atributo contiene el contenido de texto inicial del value
atributo del código fuente HTML.
Entonces, si desea saber qué hay actualmente dentro del cuadro de texto, lea la propiedad. Sin embargo, si desea saber cuál era el valor inicial del cuadro de texto, lea el atributo. O puede usar la defaultValue
propiedad, que es un puro reflejo del value
atributo:
theInput.value // returns "John"
theInput.getAttribute('value') // returns "Name:"
theInput.defaultValue // returns "Name:"
Hay varias propiedades que reflejan directamente su atributo ( rel
, id
), algunos son reflejos directos con ligeramente diferentes nombres ( htmlFor
refleja el for
atributo, className
refleja el class
atributo), muchos que reflejan su atributo pero con restricciones / modificaciones ( src
, href
, disabled
, multiple
), etc. en. La especificación cubre los diversos tipos de reflexión.