JavaRush /Курсы /Модуль 1: Web Core /Работа с атрибутами: getAt...

Работа с атрибутами: getAttribute, setAttribute, removeAttribute

Модуль 1: Web Core
22 уровень , 5 лекция
Открыта

1. Зачем работать с атрибутами через JS?

Если вы когда-либо писали HTML, то уж точно видели всякие штуки вроде:


<a href="https://google.com" target="_blank">Google</a>
<img src="cat.png" alt="Котик">
<input type="checkbox" checked>
<button disabled>Нельзя нажать</button>

Вот эти href, src, alt, checked, disabled и есть атрибуты. Они задают поведение и внешний вид элемента на странице. Хорошая новость: через JavaScript мы можем читать, менять и даже удалять эти атрибуты "на лету", не перезагружая страницу!

Изменение атрибутов на лету — это основа интерактивности на современных сайтах. Вот несколько примеров из жизни:

  • Пользователь нажал на кнопку "Показать картинку" — мы меняем атрибут src у изображения, и оно меняется на глазах.
  • Надо временно отключить кнопку отправки формы? Устанавливаем ей атрибут disabled.
  • Проверяем, есть ли у чекбокса атрибут checked — и делаем вид, что умеем читать мысли пользователя.
  • Нужно добавить кастомный атрибут для хранения дополнительной информации? Легко!

2. Основные методы: getAttribute, setAttribute, removeAttribute

Метод getAttribute — получить значение атрибута

Синтаксис:

element.getAttribute('имя_атрибута')

Возвращает строку с текущим значением атрибута или null, если такого атрибута нет.

Пример:

<img id="cat" src="cat.png" alt="Мурзик">

const img = document.getElementById('cat');
console.log(img.getAttribute('src')); // "cat.png"
console.log(img.getAttribute('alt')); // "Мурзик"
console.log(img.getAttribute('title')); // null (такого атрибута нет)

Метод setAttribute — установить или изменить атрибут

Синтаксис:

element.setAttribute('имя_атрибута', 'значение')

Если атрибута нет — он будет создан. Если есть — его значение заменится.

Пример:


img.setAttribute('src', 'dog.png'); // Теперь картинка — собака!
img.setAttribute('alt', 'Барбос');  // Новый alt-текст
img.setAttribute('title', 'Собачка'); // Добавили всплывающую подсказку

Метод removeAttribute — удалить атрибут

Синтаксис:

element.removeAttribute('имя_атрибута')

Удаляет указанный атрибут. Если его нет — ничего страшного не произойдет.

Пример:


img.removeAttribute('alt'); // Теперь у картинки нет alt-текста
img.removeAttribute('title'); // Убрали подсказку

3. Практика: делаем страницу интерактивной

Давайте шаг за шагом добавим немного магии в наше учебное приложение. Пусть у нас есть страница с картинкой и кнопками для управления ею:


<img id="main-img" src="cat.png" alt="Котик" width="200">
<br>
<button id="btn-dog">Показать собаку</button>
<button id="btn-hide">Спрятать картинку</button>
<button id="btn-show">Показать картинку</button>

Меняем картинку по кнопке


const img = document.getElementById('main-img');
const btnDog = document.getElementById('btn-dog');

btnDog.onclick = function() {
  img.setAttribute('src', 'dog.png');
  img.setAttribute('alt', 'Собачка');
};

Теперь при нажатии на кнопку картинка и alt-текст меняются!

Прячем и показываем изображение


const btnHide = document.getElementById('btn-hide');
const btnShow = document.getElementById('btn-show');

btnHide.onclick = function() {
  img.setAttribute('hidden', 'true'); // Атрибут hidden делает элемент невидимым
};

btnShow.onclick = function() {
  img.removeAttribute('hidden'); // Удаляем атрибут — картинка снова видна
};

Внимание: Атрибут hidden — стандартный способ спрятать элемент на странице, и он работает во всех современных браузерах.

4. Особенности работы с булевыми атрибутами

Некоторые атрибуты в HTML существуют просто по факту своего наличия. Например: checked, disabled, readonly, hidden. Если такой атрибут есть — он считается "включённым", если нет — "выключённым".

Пример с чекбоксом:

<input type="checkbox" id="agree" checked>

const checkbox = document.getElementById('agree');
console.log(checkbox.getAttribute('checked')); // "": просто наличие атрибута
checkbox.removeAttribute('checked'); // Снимаем галочку
checkbox.setAttribute('checked', ''); // Ставим галочку обратно

Фишка: Для булевых атрибутов значение обычно не важно — главное, чтобы атрибут был или не был.

5. Кастомные атрибуты: data-*

Иногда хочется хранить в элементе свою дополнительную информацию. Для этого придумали специальные атрибуты, которые начинаются с data-:

<div id="user" data-user-id="42" data-role="admin">Пользователь</div>

const userDiv = document.getElementById('user');
console.log(userDiv.getAttribute('data-user-id')); // "42"
console.log(userDiv.getAttribute('data-role')); // "admin"

// Можно менять!
userDiv.setAttribute('data-role', 'guest');

Бонус: В современных браузерах у таких атрибутов появляется удобное свойство dataset:


console.log(userDiv.dataset.userId); // "42"
console.log(userDiv.dataset.role);   // "guest"
userDiv.dataset.role = 'moderator';  // Меняем роль через dataset

6. Атрибуты vs свойства DOM-объектов

Внимание, сейчас будет лёгкий mind-blow! В JavaScript у DOM-элементов есть не только атрибуты, но и свойства. Иногда они совпадают, иногда нет.

Пример:

<input id="myinput" type="text" value="Привет">

const input = document.getElementById('myinput');
console.log(input.getAttribute('value')); // "Привет"
console.log(input.value);                 // "Привет"
input.value = "Пока!";                    // Меняем свойство value
console.log(input.getAttribute('value')); // Всё ещё "Привет"!
  • Атрибуты — то, что написано в HTML.
  • Свойства — текущее состояние элемента в JS.
  • После изменения через свойство, атрибут не меняется (и наоборот).

Когда использовать getAttribute/setAttribute?

  • Когда нужно работать с тем, что реально написано в HTML.
  • Когда работаете с кастомными или нестандартными атрибутами (data-*, aria-*).
  • Когда нужно добавить или убрать атрибут (например, disabled, checked, hidden).

Когда использовать свойства?

  • Когда работаете с текущим состоянием элемента: input.value, checkbox.checked, img.src и т.д.
  • Когда хотите мгновенно изменить поведение или внешний вид элемента.

7. Практика: динамическая ссылка

Давайте добавим на страницу ссылку и кнопку, чтобы менять адрес ссылки по клику.


<a id="my-link" href="https://yandex.ru" target="_blank">Перейти</a>
<button id="btn-google">Сделать ссылку на Google</button>

const link = document.getElementById('my-link');
const btnGoogle = document.getElementById('btn-google');

btnGoogle.onclick = function() {
  link.setAttribute('href', 'https://google.com');
  link.textContent = 'Теперь это Google!';
};

Теперь при нажатии на кнопку ссылка ведёт на Google, и текст меняется. Просто магия!

8. Типичные ошибки при работе с атрибутами

Ошибка №1: Путаница между свойствами и атрибутами.
Очень часто новички пытаются получить или изменить, например, checked через getAttribute, а потом удивляются, что состояние чекбокса не меняется. Помните: для текущего состояния используйте свойства (checkbox.checked), а для исходного значения или кастомных атрибутов — getAttribute/setAttribute.

Ошибка №2: Необязательные значения булевых атрибутов.
Некоторые пишут setAttribute('disabled', 'false') и думают, что кнопка станет активной. Но для булевых атрибутов важно только наличие! Чтобы сделать кнопку активной, нужно удалить атрибут: removeAttribute('disabled').

Ошибка №3: Ошибки в названии атрибута.
HTML не различает регистр, а JS — различает! Пишите строго так, как называется атрибут: 'src', 'href', 'data-user-id'. Ошибка в одной букве — и вы получите null или ничего не изменится.

Ошибка №4: Попытка изменить стандартные свойства только через атрибуты.
Если вы меняете input.value через setAttribute, это не всегда работает как ожидается. Для изменения значения поля используйте свойство: input.value = 'Новое значение'.

Ошибка №5: Удаление несуществующего атрибута.
Если вы вызвали removeAttribute для несуществующего атрибута — ничего страшного не произойдет, но иногда это может сбить с толку при отладке.

1
Задача
Модуль 1: Web Core, 22 уровень, 5 лекция
Недоступна
Создание записи Fetch
Создание записи Fetch
1
Задача
Модуль 1: Web Core, 22 уровень, 5 лекция
Недоступна
Обновление записи Fetch
Обновление записи Fetch
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ