Имеется страница, на которой есть множество элементов с одинаковыми классами, с которых нужно вытащить значения классов "data-id=", "data-float=", "data-original-title" для каждого элемента отдельно. Опыта вообще не имею, но очень хочу понять как оно работает. Буду премного благодарен за помощь. Скрин структуры страницы ниже. По сути это нужно, чтобы полученные данные сравнить с переменной и при совпадении одного из элементов с ней - покрасить фон, к примеру
Asked
Active
Viewed 895 times
0
Disrespector
- 23
- 2
2 Answers
2
const output = [];
[...document.querySelectorAll('.list__item')].forEach(item => {
output.push({
price: item.getAttribute('data-price'),
float: item.getAttribute('data-float')
});
});
console.log(output);
<ul class="list">
<div class="list__item" data-price="100" data-float="1">1</div>
<div class="list__item" data-price="200" data-float="2">2</div>
<div class="list__item" data-price="300" data-float="3">3</div>
</ul>
meine
- 7,394
-
-
@ДенисСтепанов, к чему вопрос? какой ответ Вы ожидаете на него получить? – meine May 12 '20 at 21:37
-
ну просто у
NodeListже есть свойforEach. Просто, может быть, у них какие-то различия, из-за чего вы решили его преобразовать. – Денис Степанов May 12 '20 at 21:41 -
@ДенисСтепанов, в данном случае, в принципе, не имеет значение(нет фильтра и т.д.), если углубляться, то там уже нужно развивать тему про "живой" и "статичный" список (NodeList, HTMLCollection), где-то я уже видел на форуме подобный вопрос – meine May 12 '20 at 21:59
2
console.log([...document.querySelectorAll(".just4fest")].map(e => ({
dataId: e.getAttribute('data-id'),
dataSrc: e.getAttribute('data-src')
})));
<div class="just4fest" data-id="1" data-src="https://ru.stackoverflow.com/questions/1"></div>
<div class="just4fest" data-id="2" data-src="https://ru.stackoverflow.com/questions/2"></div>
<div class="just4fest" data-id="3" data-src="https://ru.stackoverflow.com/questions/3"></div>
<div class="just4fest" data-id="4" data-src="https://ru.stackoverflow.com/questions/4"></div>
<div class="just4fest" data-id="5" data-src="https://ru.stackoverflow.com/questions/5"></div>
<div class="just4fest" data-id="6" data-src="https://ru.stackoverflow.com/questions/6"></div>
Как верно подметил @Alexander Lonberg, запись можно сократить, используя деструктуризацию. В таком случае вы получите все атрибуты с префиксом data-.
console.log([...document.querySelectorAll(".just4fest")].map(({dataset}) => dataset));
<div class="just4fest" data-id="1" data-src="https://ru.stackoverflow.com/questions/1"></div>
<div class="just4fest" data-id="2" data-src="https://ru.stackoverflow.com/questions/2"></div>
<div class="just4fest" data-id="3" data-src="https://ru.stackoverflow.com/questions/3"></div>
<div class="just4fest" data-id="4" data-src="https://ru.stackoverflow.com/questions/4"></div>
<div class="just4fest" data-id="5" data-src="https://ru.stackoverflow.com/questions/5"></div>
<div class="just4fest" data-id="6" data-src="https://ru.stackoverflow.com/questions/6"></div>
Денис Степанов
- 3,867
-
2
-
-
1Вспомнил еще - если много
data-и необходимо вытащить только некоторые, можно так.map(({dataset:d={id, src}}) => d))– Alexander Lonberg May 12 '20 at 23:11 -
Ого, признаюсь честно, первый раз такое вижу. Довольно интересно, спасибо) – Денис Степанов May 12 '20 at 23:13
-
@Alexander Lonberg, в данном случае, насколько я понимаю, запись вида
.map(({dataset:d={id, src}}) => d))не сработает, посколькуdatasetимеется в деструктурируемом обьекте. А данная запись говоритвозьми {id, src}, если dataset === undefined– Денис Степанов May 12 '20 at 23:23 -
Но можно преобразовать в запись вида
.map(({dataset, d={id:dataset.id}}) => d)), она работает) – Денис Степанов May 12 '20 at 23:28 -
datasetесть всегда и это объект. Далее мы это можем переименовать переменную, это делается такdataset: newName, но так как это объект мы его деструктурируем в несколько свойств-переменных{dataset:{id, src}. А теперь чтоб не перетаскивать их в тело функции, присваиваем новой переменнойd={id, src}– Alexander Lonberg May 12 '20 at 23:32 -
@Alexander Lonberg, все таки я склоняюсь к тому, что запись
dataset: newNameэто переименование,dataset=100- деструктуризация со значением по умолчанию. Аdataset: newName=100переименование со значением по умолчанию. Прошу прощения, чат создал случайно, у меня к нему даже доступа нет. – Денис Степанов May 12 '20 at 23:49 -
Денис, я не прав. Запарился от бессоницы и даже не проверил. Это действительно параметр по умолчанию. Тогда только так
.map(({dataset:{id, src}}) => ({id, src}))). Я применял это совсем по другому({prop:{...}}, d={...}), когда надо было определить переменные вне тела функции. Но с Array.map такого не прокатит. Каюсь :( – Alexander Lonberg May 13 '20 at 00:40
element.getAttribute('my-attribute');– meine May 12 '20 at 20:51