Атрибуты, классы и стили
Атрибуты, классы, стили
Атрибуты
const input = document.querySelector('input')
// getAttribute / setAttribute / removeAttribute
input.getAttribute('type') // 'text'
input.setAttribute('placeholder', 'Введите имя')
input.removeAttribute('disabled')
input.hasAttribute('required') // true/false
// Прямые свойства DOM (не всегда совпадают с атрибутами!)
input.value // текущее значение поля (DOM свойство)
input.defaultValue // начальное значение (из атрибута value)
input.disabled // boolean (DOM свойство)
input.type // 'text', 'email' и т.д.
// ВАЖНО: getAttribute('class') vs el.className
input.getAttribute('class') // строка из HTML
input.className // текущее значение (то же самое)
input.classList // DOMTokenList — удобнее
classList
const btn = document.querySelector('button')
// Добавить класс
btn.classList.add('active')
btn.classList.add('loading', 'disabled') // несколько сразу
// Удалить класс
btn.classList.remove('loading')
// Переключить (добавить если нет, удалить если есть)
btn.classList.toggle('active')
btn.classList.toggle('active', true) // только добавить
btn.classList.toggle('active', false) // только удалить
// Проверить наличие
btn.classList.contains('active') // true/false
// Заменить один класс другим
btn.classList.replace('old-class', 'new-class')
// Итерация
btn.classList.forEach(cls => console.log(cls))
[...btn.classList] // преобразовать в массив
Используйте
classList вместо прямой работы с className. Это безопаснее — не нужно парсить строку вручную.dataset — кастомные атрибуты data-*
// HTML: <div data-user-id="42" data-role="admin"></div>
const div = document.querySelector('[data-user-id]')
// Чтение (camelCase вместо kebab-case)
div.dataset.userId // '42' (строка!)
div.dataset.role // 'admin'
// Запись
div.dataset.lastSeen = Date.now()
// Создаст атрибут data-last-seen="..."
// Удаление
delete div.dataset.role
// Итерация по всем data-атрибутам
for (const [key, value] of Object.entries(div.dataset)) {
console.log(key, value)
}
Стили
const box = document.querySelector('.box')
// Прямая установка inline стилей
box.style.color = 'red'
box.style.fontSize = '16px' // camelCase!
box.style.backgroundColor = '#f0f0f0'
// Множественные стили через cssText (перезаписывает все)
box.style.cssText = 'color: red; font-size: 16px; margin: 0'
// Удаление стиля
box.style.color = '' // очищает inline стиль
// Получение вычисленных стилей (включая CSS из таблиц стилей)
const computed = window.getComputedStyle(box)
computed.color // 'rgb(255, 0, 0)'
computed.fontSize // '16px'
computed.display // 'block'
// computed.color = 'blue' — ошибка! getComputedStyle только для чтения