Найти данные, сравнить, если совпадает, заменить js

Имеем блоки с данными на входе с разными id в блоке "prod_id":

<div class="clicker">
    <div class="card">
        <div class="card-body">
            <div class="media">
                <div class="media-body">
                    <div class="prod_id" id="prod_id">1</div>
                </div>
            </div>
        </div>
    </div>
</div>

<div class="clicker">
    <div class="card">
        <div class="card-body">
            <div class="media">
                <div class="media-body">
                    <div class="prod_id" id="prod_id">2</div>
                </div>
            </div>
        </div>
    </div>
</div>

При нажатии на блок "clicker" в отдельном поле создается новый блок с таким же id в блоке "prod_id" и количеством 1.

<script type="text/javascript">
       window.onload = function() {

        function addProd() {
            var prodID = this.querySelector('#prod_id');

            $('.tt').append(
                '<div class="col-xl-14">'+
                    '<div class="card card-body alert-yellow border-yellow">'+
                        '<div class="media">'+
                            '<div class="media-body">'+
                                '<div class="prodID" style="display:none;">' + prodID.innerHTML + '</div>'+
                                '<div class="col-xl-12 input-group bootstrap-touchspin bootstrap-touchspin-injected">'+
                                '<input type="text" id="quantity" value="1" class="form-control touchspin-step alert-yellow">'+
                                '</div>'+
                            '</div>'+
                        '</div>'+
                    '</div>'+
                '</div>'
                );
            }

        var comments = document.getElementsByClassName('clicker');

        for( var i=0; i<comments.length; ++i ) {
            var obj = comments[i];
            obj.onclick = addProd;
        }

  }
</script>

<div class="tt">
    <div class="col-xl-14">
        <div class="card card-body alert-yellow border-yellow">
            <div class="media">
                <div class="media-body">
                    <div class="prodID" style="display:none;">1</div>
                    <div class="col-xl-12 input-group bootstrap-touchspin bootstrap-touchspin-injected">
                    <input type="text" id="quantity" value="1" class="form-control touchspin-step alert-yellow">
                    </div>
                </div>
            </div>
        </div>
    </div>

    <div class="col-xl-14">
        <div class="card card-body alert-yellow border-yellow">
            <div class="media">
                <div class="media-body">
                    <div class="prodID" style="display:none;">2</div>
                    <div class="col-xl-12 input-group bootstrap-touchspin bootstrap-touchspin-injected">
                    <input type="text" id="quantity" value="1" class="form-control touchspin-step alert-yellow">
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

Задача проверить при нажатии существует ли новый блок с таким же id, если да, то изменить количество +1 в input "quantity" нового блока.

введите сюда описание изображения


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

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

@Armen написал в комментариях, как это можно реализовать. Я использовал его идею. html-код из вопроса местами был изменен (чтобы на странице не было разных элементов с одинаковыми id, ну и добавил div-обертку с классом clickers-parent), js-код полностью был переписан. Буду рад советам по изменению кода в тех местах, где есть косяки или можно сделать лучше.

let arr = [];
/*этот массив будет хранить idишники кнопок на которые пользователь уже нажал*/
let comments = document.querySelector('.clickers-parent');
let tt = document.querySelector('.tt');

comments.onclick = function(event) {
  /* Используя подход: "Делегирование событий", ловлю клик не по элементам с классами clicker, но по их родительскому элементу с классом: clickers-parent.  */
  event.preventDefault(); //на всякий случай отменяю стандартное поведение элемента при клике

  let clicker_prod_id = +event.target.closest('[data-action="add-info"]').querySelector('.prod_id').id;
  /* нужно  получить id кнопки, на которую пользователь нажал, получаю его и преобразую в тип: number*/

  if (arr.includes(clicker_prod_id)) {
    /*если такой id уже был добавлен в массив arr раньше, значит уже создан элемент содержащий в себе input с атрибутом data-bind-prod-id равным clicker_prod_id*/

    let input_node_list = tt.querySelectorAll('input[data-bind-prod-id]');
    /*если бы я знал, как обратиться к элементу input[data-bind-prod-id="clicker_prod_id"], то обратился бы к нему напрямую, но не знаю поэтому получаю nodelist*/

    for (let elem of input_node_list) {
      /*nodelist, содержащий интересующий меня элемент, есть. Теперь пройдусь по нему циклом и найду-таки этот элемент: input[data-bind-prod-id="clicker_prod_id"]*/
      let elem_attr = +elem.getAttribute('data-bind-prod-id');
      if (elem_attr === clicker_prod_id) { //нашел
        elem.setAttribute('value', +elem.getAttribute('value') + 1);
        /* а теперь увеличу value на 1 */

        break; //т.к нужный элемент найден, выхожу из цикла, чтобы не делать ненужные итерации
      }
    }

  } else {
    //такой id не был добавлен в массив, значит элемента, содержащего в себе input с атрибутом data-bind-prod-id равным clicker_prod_id не существует и его нужно создать
    let div = document.createElement('div');
    div.className = "col-xl-14";

    div.insertAdjacentHTML("afterbegin", `<div class="card card-body alert-yellow border-yellow"><div class="media"><div class="media-body"><div class="prodID" style="display:none;">${clicker_prod_id}</div><div class="col-xl-12 input-group bootstrap-touchspin bootstrap-touchspin-injected"><input type="text" data-obj="quantity" data-bind-prod-id="${clicker_prod_id}" value="1" class="form-control touchspin-step alert-yellow"></div></div></div></div>`);
    /* Есть все основания полагать, что существует более разумный способ внедрения такой портянки на страницу, но смог пока только так */

    tt.append(div); //элемент существует, но на страницу пока не добавлен, добавляю его

    arr.push(clicker_prod_id);
    /*добавляю idишник нажатой кнопки в массив arr, чтобы при дальнейших нажатиях на кнопку обращаться к массиву arr и проверять, нажималась ли уже эта кнопка или нет*/

  }

};
.clickers-parent {
  display: flex;
  width: 100px;
}

.clicker {
  width: 50%;
  margin: 0 10px;
  border: 1px solid #b7b7b7;
  border-radius: 5px;
  text-align: center;
  padding: 5px 36px;
  background: #e2e2e2;
  cursor: pointer;
  transition: 0.2s;
  user-select: none;
}

.clicker:hover {
  background: #d6d6d6;
}
<div class="clickers-parent">
  <div class="clicker" data-action="add-info">
    <div class="card">
      <div class="card-body">
        <div class="media">
          <div class="media-body">
            <div class="prod_id" id="1">push me</div>
          </div>
        </div>
      </div>
    </div>
  </div>

  <div class="clicker" data-action="add-info">
    <div class="card">
      <div class="card-body">
        <div class="media">
          <div class="media-body">
            <div class="prod_id" id="2">and me</div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

<div class="tt">
</div>

→ Ссылка
Автор решения: nazarpunk

Зачем такие сложности? Можно проще сделать.

const $tt = document.querySelector(`.tt`);

addEventListener(`click`, e => {
  const $target = e.target.closest(`[data-id]`);
  if (!$target) return;
  const $id = document.getElementById(`id-${$target.dataset.id}`);
  if ($id) $id.querySelector(`input`).value = $id.dataset.count = +$id.dataset.count + 1;
  else $tt.insertAdjacentHTML(`beforeend`, `<div class="count" id="id-${$target.dataset.id}" data-count="1"><input type="text" value="1"></div>`);
})
.clickers-parent {
  display: flex;
  width: 100px;
}

.clicker,
.count {
  width: 50%;
  margin: 0 10px;
  border: 1px solid #b7b7b7;
  border-radius: 5px;
  text-align: center;
  padding: 5px 36px;
  background: #e2e2e2;
  cursor: pointer;
  transition: 0.2s;
  user-select: none;
}

.clicker:hover {
  background: #d6d6d6;
}
<div class="clickers-parent">
  <div class="clicker" data-action="add-info" data-id="1">
    <div class="card">
      <div class="card-body">
        <div class="media">
          <div class="media-body">
            <div class="prod_id" id="1">push me</div>
          </div>
        </div>
      </div>
    </div>
  </div>

  <div class="clicker" data-action="add-info" data-id="2">
    <div class="card">
      <div class="card-body">
        <div class="media">
          <div class="media-body">
            <div class="prod_id" id="2">and me</div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

<div class="tt">
</div>

→ Ссылка