Вебсправочник
Ваш первый сайт

Урок: найти повторяющиеся id в документе

Повторяющийся id делает связи label, фрагментов URL и ARIA неоднозначными. В этом уроке вы соберёте простой диагностический список повторов на собственной странице до публикации.

Назначение

Повторяющийся id делает связи label, фрагментов URL и ARIA неоднозначными. В этом уроке вы соберёте простой диагностический список повторов на собственной странице до публикации.

Как это работает

Код читает существующие id и не меняет документ. Для каждой строки сохраняется число в Map. В отчёт попадают только значения, встречающиеся более одного раза; сами элементы можно затем найти в инспекторе.

Пример

const counts = new Map();
for (const element of document.querySelectorAll("[id]")) {
  const id = element.id;
  counts.set(id, (counts.get(id) ?? 0) + 1);
}
const duplicates = [...counts].filter(([, count]) => count > 1);
console.table(duplicates.map(([id, count]) => ({id, count})));

Что должно получиться

На странице без повторов таблица пуста. При двух одинаковых id появляется запись с числом 2. Это проверка текущего DOM, поэтому результат зависит от уже выполненных скриптов.

Граница применения и частая ошибка

Пустой результат не доказывает валидность всего HTML. Скрипт не проверяет отдельные документы iframe и закрытые теневые деревья. После переименования id нужно обновить все ссылки и атрибуты, которые на него ссылаются, а не только сам элемент.

Самостоятельная проверка

Создайте в учебной копии два одинаковых id и связанную подпись label. Найдите повтор, исправьте имя и for, затем проверьте клик по подписи. Повторите аудит после динамического добавления ещё одной карточки.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.