Сравнение данных при переборе
Привет.
<div class="group"> <div data-cost="0" class="item">1</div> <div data-id="id" data-cost="10" class="item">2</div> <div data-cost="20" class="item">3</div> </div> <div class="group"> <div data-cost="0" class="item">1</div> <div data-cost="30" class="item">2</div> <div data-cost="40" class="item">3</div> </div> <div class="group"> <div data-cost="0" class="item show">4</div> <div data-cost="50" data-id="id" class="item show">5</div> <div data-cost="60" class="item show">6</div> </div> Подскажите, как при переборе всех item получить data-cost, при условии что data-id равны? В данном примере это data-cost="10" Я пытался сделать как то так $('.item').each(function(i, el) { var link = el.dataset.id if(link){ if(el.classList.contains('show')){ var a = el }else{ vat b = el } //Но при попытке if(a.dataset.id == b.dataset.id) // получаю ошибку, что а-нет } }) |
ureech,
<!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <div class="group"> <div data-cost="0" class="item">1</div> <div data-id="id" data-cost="10" class="item">2</div> <div data-cost="20" class="item">3</div> </div> <div class="group"> <div data-cost="0" class="item">1</div> <div data-cost="30" class="item">2</div> <div data-cost="40" class="item">3</div> </div> <div class="group"> <div data-cost="0" class="item show">4</div> <div data-cost="50" data-id="id" class="item show">5</div> <div data-cost="60" class="item show">6</div> </div> <script> let id = 'id'; let sel = `[data-id="${id}"]`; let num = [...document.querySelectorAll(sel)].reduce((sum, {dataset : {cost}})=> sum + +cost, 0); alert(num); </script> </body> </html> |
Не то. Нужно получить
Цитата:
К тому же внутри $('.item').each(function(i, el) { не хочет работать. А нужно именно при переборе. |
Цитата:
Цитата:
Цитата:
|
Да и не в цикле тоже не работает). Тут
let sel = `[data-id="${id}"]`; у меня должна быть длинная строка из чисел и букв, а по факту вижу какие то три числа. |
Цитата:
|
ureech,
<!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <div class="group"> <div data-cost="0" class="item">1</div> <div data-id="id" data-cost="10" class="item">2</div> <div data-cost="20" class="item">3</div> </div> <div class="group"> <div data-cost="0" class="item">1</div> <div data-cost="30" class="item">2</div> <div data-cost="40" class="item">3</div> </div> <div class="group"> <div data-cost="0" class="item show">4</div> <div data-cost="50" data-id="id" class="item show">5</div> <div data-cost="60" class="item show">6</div> </div> <script> let items = document.querySelectorAll('.item[data-id]'); let obj = [...items].reduce((ob, { dataset: { cost, id } }, i) => { let ar = ob[id]; if (!ar) ob[id] = ar = [cost]; else { ar.push(cost); let txt = `Что вам нужно я не понимаю, но есть ${ar.length} элемента с id = ${id} с cost = ${ar}` alert(txt) } return ob }, {}); </script> </body> </html> |
Ок,спасибо.Суть я понял.Буду колдовать)
|
Ещё вопрос). На выходе я имею массив. А как получить объект? Или что то типа того. Так как при таком раскладе работает только с одной парой значений. Если data-id не два, а четыре(две пары), то выводит только последнию.
|
ureech,
предложенный выше код выводит все совпадения в виде объекта, какой код у вас, не знаю. пишите что на входе, что хотите получить на выходе. |
Часовой пояс GMT +3, время: 14:32. |