В контексте работы с DOM важнейшей концепцией является различие между атрибутами (attributes) и свойствами (properties) HTML-элементов. Часто эти понятия воспринимаются как идентичные, но на практике между ними существуют ключевые различия, которые оказывают влияние на поведение скриптов и на управление элементами страницы.
Атрибуты — это часть разметки HTML, которые задаются
при создании элемента. Они описывают начальное состояние элемента и
хранятся в DOM как HTML-код, доступный через объект
Element.
Примеры атрибутов:
<input type="text" value="Привет" id="input1" disabled>
type="text"value="Привет"id="input1"disabledЭти атрибуты не изменяются автоматически при изменении состояния элемента пользователем. Они определяют начальные параметры элемента.
Для доступа к атрибутам используют методы:
const input = document.getElementById('input1');
// Получение атрибута
console.log(input.getAttribute('value')); // "Привет"
// Изменение атрибута
input.setAttribute('value', 'Новое значение');
// Удаление атрибута
input.removeAttribute('disabled');
Ключевая особенность: атрибуты хранят исходные значения и служат для описания элемента на уровне HTML.
Свойства — это динамические характеристики элемента, доступные через объект DOM в JavaScript. Они отражают текущее состояние элемента, включая изменения, внесённые пользователем или скриптами.
Пример работы со свойствами:
const input = document.getElementById('input1');
// Получение свойства
console.log(input.value); // текущий текст в поле, может отличаться от атрибута
// Изменение свойства
input.value = 'Другое значение';
// Проверка состояния флага disabled
console.log(input.disabled); // true или false
Особенности свойств:
Element.<input><input id="myInput" value="Начальное">
const input = document.getElementById('myInput');
input.value = "Новое значение";
console.log(input.getAttribute('value')); // "Начальное"
console.log(input.value); // "Новое значение"
value хранит исходное значение.value отражает текущее значение в поле.<input type="checkbox"><input id="checkbox" type="checkbox" checked>
const checkbox = document.getElementById('checkbox');
checkbox.checked = false;
console.log(checkbox.getAttribute('checked')); // "checked"
console.log(checkbox.checked); // false
checked показывает, был ли чекбокс изначально
отмечен.checked отражает текущее состояние.class и свойство
className<div id="myDiv" class="box"></div>
const div = document.getElementById('myDiv');
div.className = 'container';
console.log(div.getAttribute('class')); // "box"
console.log(div.className); // "container"
class сохраняет значение из HTML.className изменяется через DOM.getAttribute(name) — получить значение атрибута.setAttribute(name, value) — установить или изменить
атрибут.removeAttribute(name) — удалить атрибут.hasAttribute(name) — проверить наличие атрибута.Некоторые свойства синхронизируются с атрибутами при создании
элемента, например id, href, src,
value, checked.
Разделение понятий атрибутов и свойств позволяет избегать ошибок при манипуляциях с DOM, особенно в сложных формах, интерактивных элементах и при синхронизации состояния интерфейса.