Использование `.includes` в атрибутах HTML-элемента?

Я хочу получить массив всех атрибутов элемента HTML (включая их имена и значения), имя которого соответствует строке.

<div id = "myDiv" class = "myClass" myPrefix-template = "artist-group" myPrefix-records = "sculptors" myPrefix-caption = "People Who Sculpt"></div>

Как получить массив всех объектов-атрибутов, имя которых начинается с myPrefix-?

Это не работает:

let myDiv = document.querySelector("#myDiv");
let attribs = myDiv.attributes;
let dataAttribs = attribs.filter(attrib => {
            return attrib.name.includes('myPrefix-');
            });

Кажется, этот код должен работать. Это основано на этом: https://masteringjs.io/tutorials/fundamentals/filter-array-of-objects

Следующие работы:

const characters = [
  { name: 'MT-caption', value: 'Some People' },
  { name: 'MT-records', value: 'sculptures' },
  { name: 'class', value: 'Deep Space Nine' }
];

tngCharacters = characters.filter(character => {
  return character.name.includes('MT-');
});

подсказка: все атрибуты data-* доступны в myDiv.dataset - ваш фильтр вообще не нужен :p

Jaromanda X 02.12.2022 01:46

@JaromandaX И я уверен, вы можете сказать мне, почему моя попытка с data- не работает. replit.com/@johnaweiss/element-dataset#script.js

johny why 08.12.2022 18:18

нет, я не могу тебе этого сказать

Jaromanda X 08.12.2022 23:37
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
147
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Отличный ответ был любезно опубликован другим участником, но, к сожалению, они удалили свой пост. Вот:

Новый HTML:

Имена настраиваемых атрибутов должны быть строчными буквами «myprefix-etc». .includes не найдет «myPrefix-etc», как указано в вопросе. Следует переписать как:

<div id = "myDiv" class = "myClass" myprefix-template = "artist-group" myprefix-records = "sculptors" myprefix-caption = "People Who Sculpt"></div>

JS:

// get element
const myDiv = document.querySelector("#myDiv");

// convert attributes from NamedNodeMap to array
const attribs = [...myDiv.attributes];

// set search-string
const searchString = "myprefix-"

// filter the array where name includes the search string
const foundAttribs = attribs.filter(attrib => {
    return attrib.name.includes(searchString);
});

// print items to console
foundAttribs.forEach((attrib) => console.info(attrib.name))

использованная литература

Как преобразовать список узлов DOM в массив в Javascript?

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

Другие вопросы по теме