В значение sum каждый раз попадает span.textContent только первого дива, а необходимо значение дива на котором был клик. Что необходимо подправить?

Необходимо сделать так, чтобы кликами можно было выбрать несколько продуктов из div и их суммарная стоимость при этом писалась бы в абзац?

let el = document.querySelector("#el");
let el1 = document.querySelector("#el1");
let el2 = document.querySelector("#el2");

let arr = [{
    name: 'milk',
    price: 23.00
  },
  {
    name: 'ice_cream',
    price: 70.00
  },
  {
    name: 'cottege',
    price: 85.00
  }
];

let sum = 0;
let set = new Set;
for (let obj of arr) {
  let div = document.createElement('div');
  div.innerHTML = `${obj.name}: <span>${obj.price}</span>`;

  el.appendChild(div);
}
let divs = document.querySelectorAll('div');
let span = document.querySelector('div>span');
for (let div of divs) {
  div.addEventListener('click', function(e) {
    set.add(this.textContent);
    let arr = [...set];
    el1.textContent = arr.join(', ');

    sum += +span.textContent;
    console.log(span.textContent);
    el2.textContent = sum;
  })
}
<p id="el"></p>
<p id="el1"></p>
<p id="el2"></p>


Ответы (1 шт):

Автор решения: SwaD

У вас не правильно определась переменная span
Туда попадало значение первого элемента на странице. Надо просто перенсти селектор и саму переменную в обработчик события клика

let el = document.querySelector("#el");
let el1 = document.querySelector("#el1");
let el2 = document.querySelector("#el2");

let arr = [{
    name: 'milk',
    price: 23.00
  },
  {
    name: 'ice_cream',
    price: 70.00
  },
  {
    name: 'cottege',
    price: 85.00
  }
];

let sum = 0;
let set = new Set;
for (let obj of arr) {
  let div = document.createElement('div');
  div.innerHTML = `${obj.name}: <span>${obj.price}</span>`;

  el.appendChild(div);
}
let divs = document.querySelectorAll('div');
// let span = document.querySelector('div>span'); <- Убираем
for (let div of divs) {
  div.addEventListener('click', function(e) {
    // Создаем и выбираем из this(это элемент по которому кликнули)
    const span = this.querySelector('div>span');
    set.add(this.textContent);
    let arr = [...set];
    el1.textContent = arr.join(', ');

    sum += +span.textContent;
    console.log(span.textContent);
    el2.textContent = sum;
  });
}
<p id="el"></p>
<p id="el1"></p>
<p id="el2"></p>

→ Ссылка