← Назад к вопросам

Как посмотреть весь список установленных атрибутов?

2.3 Middle🔥 124 комментариев
#JavaScript Core

Комментарии (4)

🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Методы просмотра атрибутов элемента

Есть несколько способов получить и отобразить все установленные атрибуты HTML элемента. Рассмотрим самые практичные и распространенные из них.

1. Свойство attributes (NamedNodeMap)

Самый прямой способ - использовать встроенное свойство attributes, которое возвращает коллекцию NamedNodeMap всех атрибутов элемента.

const element = document.getElementById('myElement');

// Получить все атрибуты как NamedNodeMap
const attrs = element.attributes;

// Итерировать через все атрибуты
for (let i = 0; i < attrs.length; i++) {
  const attr = attrs[i];
  console.log(attr.name + ' = ' + attr.value);
}

// Или преобразовать в объект
const attrsObject = {};
for (let attr of element.attributes) {
  attrsObject[attr.name] = attr.value;
}
console.log(attrsObject);

2. Методы getAttribute и getAttributeNames

getAttributeNames() возвращает массив имен всех атрибутов - удобнее, чем работать с NamedNodeMap.

const element = document.querySelector('div');

// Получить все имена атрибутов
const attrNames = element.getAttributeNames();
console.log(attrNames); // массив имен атрибутов

// Получить значения всех атрибутов
const allAttrs = {};
attrNames.forEach(name => {
  allAttrs[name] = element.getAttribute(name);
});

console.log(allAttrs);

3. Преобразование в JSON

Для удобного логирования и дебага можно преобразовать все атрибуты в читаемый формат.

function getAllAttributes(element) {
  const attrs = {};
  
  for (let attr of element.attributes) {
    attrs[attr.name] = attr.value;
  }
  
  return attrs;
}

function logAllAttributes(element) {
  const attrs = getAllAttributes(element);
  console.table(attrs); // красивый вывод
  console.log(JSON.stringify(attrs, null, 2));
}

logAllAttributes(document.body);

4. Реальный пример с фильтрацией

class AttributeInspector {
  constructor(selector) {
    this.element = document.querySelector(selector);
  }
  
  getAllAttributes() {
    const result = {};
    for (let attr of this.element.attributes) {
      result[attr.name] = attr.value;
    }
    return result;
  }
  
  getDataAttributes() {
    return Object.fromEntries(
      this.element.getAttributeNames()
        .filter(name => name.startsWith('data-'))
        .map(name => [name, this.element.getAttribute(name)])
    );
  }
  
  getAriaAttributes() {
    return Object.fromEntries(
      this.element.getAttributeNames()
        .filter(name => name.startsWith('aria-'))
        .map(name => [name, this.element.getAttribute(name)])
    );
  }
  
  inspect() {
    console.group('Атрибуты элемента');
    console.log('Элемент:', this.element);
    console.log('Все атрибуты:', this.getAllAttributes());
    console.log('Data атрибуты:', this.getDataAttributes());
    console.log('ARIA атрибуты:', this.getAriaAttributes());
    console.groupEnd();
  }
}

const inspector = new AttributeInspector('#myDiv');
inspector.inspect();

5. Отличие от свойств

Важно различать атрибуты (attributes) и свойства (properties) DOM элемента.

const input = document.querySelector('input');

// Атрибут (из HTML)
input.getAttribute('value'); // изначальное значение

// Свойство (текущее состояние)
input.value; // текущее значение в поле

Рекомендации

  • Используй getAttributeNames() для современного кода
  • Для дебага в консоли вызывай console.table() на объекте атрибутов
  • Помни про разницу между атрибутами и свойствами
  • В React используй DevTools, они показывают все атрибуты визуально
  • Метод attributes полезен, когда нужна информация об изменении через MutationObserver