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 ( typey 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 attributespropiedad 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, typey valuepropiedades (entre otros):
La idpropiedad es una propiedad reflejada para el idatributo: obtener la propiedad lee el valor del atributo y establecer la propiedad escribe el valor del atributo. ides una propiedad puramente reflejada, no modifica ni limita el valor.
La typepropiedad es una propiedad reflejada para el typeatributo: obtener la propiedad lee el valor del atributo y establecer la propiedad escribe el valor del atributo. typeno 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.typete da "text".
Por el contrario, la valuepropiedad no refleja el valueatributo. En cambio, es el valor actual de la entrada. Cuando el usuario cambia manualmente el valor del cuadro de entrada, la valuepropiedad 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 valuepropiedad refleja el contenido de texto actual dentro del cuadro de entrada, mientras que el valueatributo contiene el contenido de texto inicial del valueatributo 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 defaultValuepropiedad, que es un puro reflejo del valueatributo:
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 ( htmlForrefleja el foratributo, classNamerefleja el classatributo), 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.