Relación entre Atributos HTML y Propiedades del DOM en JavaScript
Cuando manipulamos elementos en el DOM con JavaScript, es común trabajar con atributos como href
, id
, value
o class
. Al principio puede parecer que leer o modificar un atributo HTML es lo mismo que acceder a una propiedad del objeto DOM que representa ese elemento.
Sin embargo, aunque están relacionadas, los atributos HTML y las propiedades del DOM no son exactamente lo mismo. Entender esta diferencia es fundamental para escribir código más predecible, evitar errores y tener control total sobre los elementos que estamos modificando.
En este artículo aprenderás qué es un atributo HTML, qué es una propiedad del DOM, cómo se relacionan y en qué situaciones sus comportamientos difieren.
Qué son los Atributos HTML
Un atributo HTML es cualquier información escrita directamente en la etiqueta de un elemento en el archivo HTML. Este define valores iniciales que el navegador usa para renderizar el elemento en la carga del documento. Por ejemplo:
<input type="text" value="Texto original" id="campo">
En el anterior ejemplo el atributo value
tiene un valor inicial de "Texto original"
y se usa solo en el momento de cargar el DOM por primera vez.
Podemos acceder a este valor desde JavaScript con:
const input = document.getElementById("campo");
input.getAttribute("value"); // "Texto original"
Qué es una Propiedad del DOM
Una propiedad del DOM es parte del objeto JavaScript que representa al elemento HTML en memoria. A diferencia de los atributos, las propiedades pueden cambiar a medida que el usuario interactúa con la página o que el script modifica el contenido.
Siguiendo con el ejemplo anterior:
input.value = "Texto modificado";
input.value; // "Texto modificado"
Esto cambia la propiedad value
del DOM que refleja el contenido actual del campo de entrada, pero no cambia el atributo HTML original.
Si consultamos de nuevo:
input.getAttribute("value"); // "Texto original"
Veremos que el atributo HTML sigue igual. Esto muestra cómo, en algunos casos, atributo y propiedad pueden divergir.
Sincronización entre Atributos y Propiedades
En muchos elementos y atributos la propiedad DOM y el atributo HTML están sincronizados al cargar la página, pero luego pueden separarse. Aquí hay algunos ejemplos clave donde esto ocurre:
value
en <input>
- Atributo: representa el valor por defecto, definido en el HTML.
- Propiedad: representa el valor actual que puede haber sido modificado por el usuario o por JavaScript.
<input type="text" value="Inicial" id="campo">
const campo = document.getElementById("campo");
campo.value = "Cambiado";
console.log(campo.getAttribute("value")); // "Inicial"
console.log(campo.value); // "Cambiado"
Otro ejemplo podria ser checked
en <input type="checkbox">
donde la propiedad indica si está actualmente marcado, mientras que el atributo indica si el checkbox está marcado al cargar.
Modificar Atributos vs. Modificar Propiedades
Veamos cómo modificar un atributo y una propiedad difiere en comportamiento.
Modificar un atributo (setAttribute()
):
const input = document.getElementById("campo");
input.setAttribute("value", "Nuevo desde atributo");
En el anterior código de ejemplo se modifica el atributo en el HTML, pero no cambia lo que el usuario ve si ya interactuó con el campo.
Modificar una propiedad (modifica lo que el usuario ve):
input.value = "Nuevo desde propiedad";
Esto actualiza el contenido visible en el campo de entrada y afecta el comportamiento inmediato del formulario.
Errores Comunes y Buenas Prácticas
Es un error asumir que getAttribute()
y element.prop
devuelven lo mismo. Este es uno de los errores más frecuentes. Por ejemplo:
const campo = document.getElementById("campo");
campo.value = "Actualizado";
campo.getAttribute("value"); // ❌ No devuelve "Actualizado"
Buena práctica: usa atributos para valores iniciales y propiedades para lógica interactiva:
- Usa
getAttribute()
ysetAttribute()
solo si necesitas trabajar con el HTML original. - Usa propiedades (
element.value
,element.checked
, etc.) cuando trabajes con la lógica del usuario o eventos.
Casos Comunes Donde se Ven Diferencias
href
en<a>
: El atributo puede tener una URL relativa, pero la propiedadhref
devuelve la URL absoluta.class
: El atributo se accede congetAttribute('class')
, pero la propiedad eselement.className
.style
: El atributo accede al estilo en línea como string, peroelement.style
da acceso al objeto CSSStyleDeclaration.
Conclusión
Aunque atributos HTML y propiedades del DOM parecen similares, entender sus diferencias es clave para manipular correctamente los elementos en una página web.
- Los atributos definen valores iniciales escritos en el HTML.
- Las propiedades reflejan el estado actual del elemento en el DOM, y son las que normalmente se modifican con JavaScript.
Al conocer esta distinción, podrás evitar errores comunes y tendrás más control sobre el comportamiento de tus elementos.
En el siguiente artículo aprenderemos cómo leer, modificar y eliminar atributos HTML usando métodos como getAttribute()
, setAttribute()
y removeAttribute()
.