В JavaScript и особенно при работе с DOM через библиотеки вроде Bliss.js важно понимать разницу между атрибутами HTML-элементов и их свойствами DOM-объектов. Ошибки в этом понимании часто приводят к некорректной работе интерфейса и трудностям при динамическом обновлении элементов страницы.
Атрибуты — это значения, указанные в исходном HTML-коде элемента. Они существуют как часть разметки и отражают первоначальное состояние элемента. Например:
<input type="text" value="Hello">
Здесь type и value — атрибуты. Их основные
особенности:
getAttribute и
setAttribute. Пример в Bliss.js:var input = bliss.$('input');
var val = input.getAttribute('value'); // "Hello"
input.setAttribute('value', 'World');
<input>, но атрибут value останется
прежним, пока не вызвать setAttribute.Свойства DOM — это поля объектов, представляющих элементы. Они динамически отражают текущее состояние элемента и чаще всего синхронизированы с атрибутами только при создании элемента. Примеры:
var input = bliss.$('input');
input.value; // "Hello" изначально
input.value = "New Value"; // динамическое изменение свойства
Ключевые характеристики:
<input>).getAttribute.input.value = "Changed";
console.log(input.getAttribute('value')); // "Hello"
Bliss.js предоставляет упрощённый синтаксис для работы с обоими типами:
bliss.$('#link').attr('href'); // получить значение href
bliss.$('#link').attr('href', 'newurl'); // изменить значение href
bliss.$('#checkbox').prop('checked'); // получить состояние чекбокса
bliss.$('#checkbox').prop('checked', true); // изменить состояние
Методы .attr() и .prop() разделяют две
концепции. Ошибки часто происходят, когда пытаются через
.attr() изменить свойства, зависящие от состояния DOM
(например, checked, selected,
value). В таких случаях нужно использовать
.prop().
checked
определяет, был ли элемент отмечен изначально, а свойство
checked отражает текущее состояние.var checkbox = bliss.$('#agree');
checkbox.prop('checked', true); // реально устанавливает галочку
checkbox.attr('checked'); // может остаться "checked" или null
selected
задаёт выбранную опцию по умолчанию, свойство selected
отражает текущее состояние:var option = bliss.$('option:selected');
option.prop('selected', true); // реально выбирает элемент
data-*
при парсинге превращаются в свойства через dataset, что
позволяет обращаться к ним как к объекту:var el = bliss.$('#item');
el.dataset.id = '123'; // изменяет значение свойства
el.getAttribute('data-id'); // возвращает "123"
.attr() для
неизменяемых атрибутов разметки: id,
class, src, href,
data-*..prop() для
динамических свойств состояния: checked,
selected, value, disabled.Эта чёткая граница помогает избежать несоответствий между видимой частью интерфейса и исходным HTML-кодом.
| Параметр | Атрибут (attr) |
Свойство (prop) |
|---|---|---|
| Отражает | Исходный HTML | Текущее состояние DOM |
| Изменение пользователем | Нет | Да |
| Методы Bliss.js | .attr() |
.prop() |
| Примеры | href, id, data-* |
checked, selected, value |
Эти различия критичны для корректной работы динамического интерфейса и правильного синхронизированного взаимодействия с элементами через Bliss.js.