В библиотеке Dom7, которая используется как облегчённая версия jQuery
в среде JavaScript, методы attr и prop
предназначены для работы с атрибутами и свойствами элементов DOM.
Несмотря на внешнее сходство и частое пересечение в задачах, между ними
существуют принципиальные различия.
attr)Атрибуты — это значения, заданные в HTML-разметке. Метод
attr позволяет читать или изменять именно эти
исходные атрибуты.
Синтаксис чтения атрибута:
var value = $('.element').attr('data-id');
undefined.Синтаксис изменения атрибута:
$('.element').attr('href', 'https://example.com');
attr изменяется
значение в HTML, но не обязательно внутреннее состояние
элемента в браузере.Особенности работы с атрибутами:
href, src,
data-*).prop)Свойства — это внутренние характеристики объектов DOM, доступные
через JavaScript. Метод prop работает напрямую с объектом
элемента, а не с его HTML-разметкой.
Синтаксис чтения свойства:
var checked = $('.checkbox').prop('checked');
true
или false для чекбоксов.Синтаксис изменения свойства:
$('.checkbox').prop('checked', true);
hidden, активация кнопок через
disabled.Особенности работы с свойствами:
| Характеристика | attr |
prop |
|---|---|---|
| Источник данных | HTML-разметка | Объект DOM |
| Тип возвращаемого значения | Всегда строка | Логический, числовой, строка и т.д. |
| Влияние на состояние | Только атрибут в HTML | Реальное состояние элемента |
| Применение | Работа с data-*, href,
src |
Управление динамическим поведением: checked,
disabled, value |
Изменение атрибута href:
$('.link').attr('href', 'https://newsite.com');
HTML будет содержать новый адрес, но если элемент
<a> был уже активирован через JavaScript, реальное
состояние перехода изменится только при следующем событии.
Работа с чекбоксом:
// Проверка состояния
if ($('.checkbox').prop('checked')) {
console.log('Чекбокс активен');
}
// Установка состояния
$('.checkbox').prop('checked', false);
Здесь изменение свойства напрямую меняет состояние в интерфейсе, в отличие от атрибута, который не гарантирует синхронизацию с реальным состоянием.
attr и
propНекоторые атрибуты и свойства могут синхронизироваться автоматически браузером. Например:
checked у чекбоксовselected у <option>value у <input>При динамическом изменении через attr значение свойства
может не обновиться, а при изменении через prop атрибут
HTML остается прежним.
Пример:
// HTML: <input type="checkbox" checked>
$('.checkbox').attr('checked', false); // Атрибут изменился, но галочка может остаться
$('.checkbox').prop('checked', false); // Галочка исчезнет, свойство реально изменено
attr, когда требуется манипулировать
HTML-разметкой и хранить данные в атрибутах.prop, когда необходимо управлять
состоянием элементов в интерфейсе.checked,
selected, disabled, отдавать предпочтение
prop.Этот подход позволяет чётко разделять работу с разметкой и поведением элементов, что важно для поддерживаемого и предсказуемого кода на Dom7.