首页 > 解决方案 > 具有相同 ID 的 HTML 属性求和

问题描述

您如何对共享相同 ID 的属性求和?我要问的不是最佳实践,并且愿意接受有关如何使其发挥作用的建议。我有拖放区域,一些元素通过拖放进行更新/传输。例如:

<div draggable="true" class="box" id="1" value='g8=1 g9=0'>Random Text 1.1</div>
<div draggable="true" class="box" id="1" value='g8=0 g9=3'>Random Text 1.2</div>
<div draggable="true" class="box" id="1" value='g8=0 g9=0'>Random Text 1.3</div>

从上面的代码中,第 1 列 g8 sum = 1 和第 1 列 g9 sum = 3。

我只需要它对每列数据的不同值求和,因为它是通过拖放更新的。解决这个问题的最佳方法是什么?

下面是一个工作示例,对我目前所拥有的内容进行了精简。

document.addEventListener('DOMContentLoaded', (event) => {

  var dragSrcEl = null;

  function handleDragStart(e) {
    this.style.opacity = '0.4';

    dragSrcEl = this;
    e.dataTransfer.effectAllowed = 'move';
    e.dataTransfer.setData('text/html', this.innerHTML);
  }

  function handleDragOver(e) {
    if (e.preventDefault) {
      e.preventDefault();
    }

    e.dataTransfer.dropEffect = 'move';

    return false;
  }

  function handleDragEnter(e) {
    this.classList.add('over');

  }

  function handleDragLeave(e) {
    this.classList.remove('over');
  }

  function handleDrop(e) {
    if (e.stopPropagation) {
      e.stopPropagation(); // stops the browser from redirecting.
    }

    if (dragSrcEl != this && this.className != "fc-event over") {
      console.log(this);
      var oValue = $(this).attr('value');
      var value = $(dragSrcEl).attr('value');
      console.log(oValue);
      console.log(value);
      if (dragSrcEl.className !== "fc-event") {
        dragSrcEl.innerHTML = this.innerHTML;
        $(dragSrcEl).attr("value", oValue);
        this.innerHTML = e.dataTransfer.getData('text/html');
        $(this).attr("value", value);
      } else {
        this.innerHTML = e.dataTransfer.getData('text/html');
        $(this).attr("value", value);
      }

    }

    return false;

  }

  function handleDragEnd(e) {
    this.style.opacity = '1';

    items.forEach(function(item) {
      item.classList.remove('over');
    });
  }


  let items = document.querySelectorAll('.grid-container .box');
  items.forEach(function(item) {
    item.addEventListener('dragstart', handleDragStart, false);
    item.addEventListener('dragenter', handleDragEnter, false);
    item.addEventListener('dragover', handleDragOver, false);
    item.addEventListener('dragleave', handleDragLeave, false);
    item.addEventListener('drop', handleDrop, false);
    item.addEventListener('dragend', handleDragEnd, false);
  });



  let items2 = document.querySelectorAll('#external-events-listing div');
  items2.forEach(function(item2) {
    item2.addEventListener('dragstart', handleDragStart, false);
    item2.addEventListener('dragenter', handleDragEnter, false);
    item2.addEventListener('dragover', handleDragOver, false);
    item2.addEventListener('dragleave', handleDragLeave, false);
    item2.addEventListener('drop', handleDrop, false);
    item2.addEventListener('dragend', handleDragEnd, false);
  });

});
body {
  margin-top: 40px;
  text-align: center;
  font-size: 14px;
  font-family: "Lucida Grande", Helvetica, Arial, Verdana, sans-serif;
}

#wrap {
  width: 1100px;
  margin: 0 auto;
}

#external-events {
  float: left;
  width: 150px;
  padding: 0 10px;
  border: 1px solid #ccc;
  background: #eee;
  text-align: left;
}

#external-events h4 {
  font-size: 16px;
  margin-top: 0;
  padding-top: 1em;
}

#external-events-listing {
  width: 140px;
  height: 175px;
  overflow: auto;
}

#external-events .fc-event {
  margin: 10px 0;
  cursor: pointer;
}

#external-events p {
  margin: 1.5em 0;
  font-size: 11px;
  color: #666;
}

#external-events p input {
  margin: 0;
  vertical-align: middle;
}

.grid-container {
  display: grid;
  grid-template-columns: auto auto auto;
  grid-gap: 10px;
  background-color: #2196F3;
  padding: 10px;
}

.box {
  border: 2px solid #666;
  background-color: #ddd;
  border-radius: .5em;
  padding: 10px;
  cursor: move;
}

.box.over {
  border: 3px dotted #666;
}

[draggable] {
  user-select: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h4>Rearranging Section</h4>
<div class="grid-container">
  <div draggable="false" class="box1" id="1">Desired Result: Sum g8 Col1</div>
  <div draggable="false" class="box2" id="2">Desired Result: Sum g8 Col2</div>
  <div draggable="false" class="box3" id="3">Desired Result: sum g8 Col3</div>
  <div draggable="false" class="box1" id="1">Desired Result: Sum g9 Col1</div>
  <div draggable="false" class="box2" id="2">Desired Result: Sum g9 Col2</div>
  <div draggable="false" class="box3" id="3">Desired Result: sum g9 Col3</div>
  <div draggable="true" class="box" id="1" value='g8=1 g9=0'>Random Text 1.1</div>
  <div draggable="true" class="box" id="2" value='g8=3 g9=1'>Random Text 2.1</div>
  <div draggable="true" class="box" id="3" value='g8=2 g9=5'>Random Text 3.1</div>
  <div draggable="true" class="box" id="1" value='g8=0 g9=3'>Random Text 1.2</div>
  <div draggable="true" class="box" id="2" value='g8=1 g9=0'>Random Text 2.2</div>
  <div draggable="true" class="box" id="3" value='g8=2 g9=0'>Random Text 3.2</div>
  <div draggable="true" class="box" id="1" value='g8=0 g9=0'>Random Text 1.3</div>
  <div draggable="true" class="box" id="2" value='g8=2 g9=2'>Random Text 2.3</div>
  <div draggable="true" class="box" id="3" value='g8=3 g9=4'>Random Text 3.3</div>

</div>

标签: javascripthtmljqueryjquery-events

解决方案


推荐阅读