Разница между способами получения атрибутов

Работа с атрибутами через свойства и через метод getAttribute - это не одно и то же: при изменении свойства значение атрибута, полученное через метод, не меняется. Давайте посмотрим на примере атрибута value инпута:

<input id="elem" value="old">

Поменяем свойство value, а затем попробуем прочитать значение атрибута через метод getAttribute:

let elem = document.querySelector('#elem'); elem.value = 'new'; // поменяли свойство let value = elem.getAttribute('value'); console.log(value); // выведет 'old' - свойство не поменялось

То же самое будет, если пользователь изменит содержимое инпута. В этом случае в свойстве будет новое значение, а в атрибуте - исходное. Получается, что атрибут, полученный через getAttribute, хранит исходное значение даже после того, как пользователь заполнил поле и свойство изменилось.

Эту особенность можно использовать. Например, можно взять изначальное значение из атрибута и сравнить со свойством, чтобы узнать, изменилось ли значение. А при необходимости и перезаписать свойство атрибутом, отменив изменения.

Дан инпут с каким-то начальным значением. Дана также кнопка. По нажатию на кнопку определите, было ли изменено пользователем начальное значение инпута.

Изменение атрибута

А вот изменение атрибута обновляет свойство:

elem.setAttribute('value', 'new'); // поменяли атрибут let value = elem.value; console.log(value); // выведет 'new'

Дан инпут с каким-то начальным значением. Пусть пользователь меняет это значение. Сделайте рядом с инпутом кнопку, по нажатию на которую value инпута вернется в изначальное значение.