Выбор DOM-элементов по data- атрибуту без jquery в JS

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы выбрать элементы с атрибутом data-xxx, примените следующий синтаксис:

JS
Скопировать код
const dataElements = document.querySelectorAll('[data-xxx]');

Для вывода соответствующих значений в консоль, выполните:

JS
Скопировать код
dataElements.forEach(el => console.log(el.dataset.xxx));

Используя исключительно JavaScript, мы легко нацеливаемся на data-атрибуты, минуя jQuery. Вот так просто!

Кинга Идем в IT: пошаговый план для смены профессии

От NodeList к упрощённому Array

Недостаток querySelectorAll заключается в том, что он возвращает NodeList, который хотя и похож на массив, но не является таковым. Однако проблема легко решается:

JS
Скопировать код
// Приготовьтесь, идет преобразование
const dataElementsArray = Array.from(dataElements);

Теперь мы можем пользоваться всеми удобствами методов массива в JavaScript!

Скорость — это не просто "быстрее"

querySelectorAll является эффективным, но при работе с крупными документами может привести к замедлению работы. Чтобы предотвратить замедление, сократите область поиска:

JS
Скопировать код
// Надеваем покровы от замедления
const container = document.getElementById('specific-container');
const scopedDataElements = container.querySelectorAll('[data-xxx]');

Чем меньше ищем, тем лучше!

Выцепить ценное (или data-атрибут)

Чтобы получить фактическое значение атрибута data-xxx, используйте dataset:

JS
Скопировать код
// Это будет нашим волшебным окном в данные
dataElements.forEach(el => {
  const value = el.dataset.xxx;
  console.log(value);
});

Визуализация

Представьте, что наш мгновенный взгляд скользит по лесу виртуальных элементов:

Markdown
Скопировать код
Лес:       🌳🌲🌳🐦(data-xxx)🌲🌳🐦🌳🌲🌳🐦(data-xxx)🌲🐦🌳

И вот наш CSS-селектор попадает в цель:

CSS
Скопировать код
[data-xxx] {
  /* Стили для выделения элементов с data-xxx */
}
Markdown
Скопировать код
Найдено: ✨🐦(data-xxx)✨  ✨🐦(data-xxx)✨

CSS-селекторы делают поиск удобным и быстрым!

Знакомство с динамическими обновлениями

Проблемы статического NodeList

querySelectorAll не отслеживает изменения в DOM, поэтому для мониторинга динамических изменений воспользуйтесь MutationObserver:

JS
Скопировать код
// Мы становимся агентами следящими за NodeList
const observer = new MutationObserver(mutations => {
  mutations.forEach(mutation => {
    if (mutation.type === 'childList') {
      // Обработайте добавление или удаление узлов
    }
  });
});
observer.observe(document.body, { childList: true, subtree: true });

Слияние массивов

Пора подружить querySelectorAll с другими методами для массивов. А методам массивов – привет:

JS
Скопировать код
// Инициируем действие
Array.from(dataElements)
     .filter(el => el.dataset.xxx === 'specificValue')
     .forEach(el => {
       /* ... */
     });

Но не забывайте о проверке

querySelectorAll не всегда совместим с некоторыми браузерами. Проверьте его поддержку на Can I use....

Полезные материалы

  1. HTML Global data-* Attributes — знакомство с data-атрибутами в HTML5.
  2. Использование data-атрибутов – Обучение веб-разработке | MDN — подробное руководство по использованию data-атрибутов.
  3. Полное руководство по Data-Attributes | CSS-Tricks — все об возможностях data-атрибутов.
  4. Selectors API Level 1 — официальная спецификация Selectors API от W3C для DOM.
  5. Атрибутные селекторы – CSS: Каскадные Таблицы Стилей | MDN — руководство по атрибутным селекторам в CSS.
  6. :not | CSS-Tricks — как исключать элементы с определенными атрибутами, используя :not().
  7. Can I use... Таблицы поддержки для HTML5, CSS3 и других технологий — таблица совместимости браузеров для querySelector.

Завершение

Продолжайте практиковать! Каждая проблема — это еще один шаг к совершенству. А "лайки" — приятный бонус.

Пусть мудрость кода пребудет с вами! 👩‍💻