drag images in a table - fix size and each image

Viewed 61

enter image description here I want to be able to drag every single image and to go them where ever I like.I can not.I try to do it but I failed many times.Also,I don't know why my table is not standar is increasing his size(width and height).I want a standar table ,that is changing when I drag the image.Also I am not able to move all the images I insert them. Here is the javascript code

 $(function() {
    initDragAndDrop();
    $('#addRow').on('click', function() {
      $('#targetTable > tbody:last-child').append('<tr><td></td><td></td><td></td></tr>');
      clearDragAndDrop();
      initDragAndDrop();
    });
  });

  function clearDragAndDrop() {
    $('.event').off();
    $('table td').off('dragenter dragover drop');
  }

  function initDragAndDrop() {
    $('.event').on('dragstart', function(event) {
      var dt = event.originalEvent.dataTransfer;
      dt.setData('Text', $(this).attr('id'));
    });
    $('table td').on('dragenter dragover drop', function(event) {
      event.preventDefault();
      if (event.type === 'drop') {
        var data = event.originalEvent.dataTransfer.getData('Text', $(this).attr('id'));
        de = $('#' + data).detach();
        de.appendTo($(this));
      }
    });
  }

the .css code

table span {
  display: block;
  background-color: #09C;
  height: 1%;
  width: 200%;
  text-align: top;
  font-weight: bold;
  padding-top: 1px;
}

the code in body is this -the way I created my table

 <table  id="targetTable" class="b" border="10" bordercolor="blue" style="width: 100%" height="10%" id="myT" >
            <tbody><tr>
            
                   <td> 1</td>
                   <td> 2</td>
                  <td> 3</td>
                   <td> 4</td>
                   <td> 5</td>
                   <td> 6</td>
                   <td> 7</td>
                   <td> 8</td>
                   <td> 9</td>
                   <td> 10</td>
                   <td> 11</td>
                   <td style="width: 5px; height: 1px;">12 
                   <br>
                   
  <span class="event" id="a" draggable="true">         a <img  src="./images/P2R.png" class="b" alt="Norway" style="width:30%" ></span>  
                   <br>
     <span class="event" id="a" draggable="true">             b <img   src="./images/P2R.png" class="b" alt="Norway" style="width:30%"></span>
                   <br>
    <span class="event" id="a" draggable="true">             c<img       src="./images/P2R.png" class="b" alt="Norway" style="width:30%"></span>
                   <br>
    <span class="event" id="a" draggable="true">               d<img      src="./images/P2R.png" class="b" alt="Norway" style="width:30%"></span>
                   <br>
    <span class="event" id="a" draggable="true">               e<img class="dragme"         src="./images/P2R.png" class="b" alt="Norway" style="width:30%"></span>
                   <br>
    <span class="event" id="a" draggable="true">               f<img  class="dragme"       src="./images/P2R.png" class="b" alt="Norway" style="width:30%"></span>
                   <br>
    <span class="event" id="a" draggable="true">               g<img class="dragme"         src="./images/P2R.png" class="b" alt="Norway" style="width:30%"></span>
                   <br>
    <span class="event" id="a" draggable="true">               h<img class="dragme"         src="./images/P2R.png" class="b" alt="Norway" style="width:30%"></span>
                   <br>
    <span class="event" id="a" draggable="true">               i<img  class="dragme"       src="./images/P2R.png" class="b" alt="Norway" style="width:30%"></span>
                   <br>
    <span class="event" id="a" draggable="true">               k<img   class="dragme"      src="./images/P2R.png" class="b" alt="Norway" style="width:30%"></span>
                   <br>
    <span class="event" id="a" draggable="true">               l<img  class="dragme"       src="./images/P2R.png" class="b" alt="Norway" style="width:30%"></span>
                   <br>
    <span class="event" id="a" draggable="true">               m<img  class="dragme"       src="./images/P2R.png" class="b" alt="Norway" style="width:30%"></span>
                   <br>
    <span class="event" id="a" draggable="true">               n<img class="dragme"        src="./images/P2R.png" class="b" alt="Norway" style="width:30%"></span>
                   <br>
        <span class="event" id="a" draggable="true">           o<img class="dragme"        src="./images/P2R.png" class="b" alt="Norway" style="width:30%"></span>
                   <br>
    <span class="event" id="a" draggable="true">               p<img class="dragme"        src="./images/P2R.png" class="b" alt="Norway" style="width:30%"></span>
                   
                   
                   
                   
                   
                   
                   </td>
                   
                        </tr>
                        
                        <td> 24
                        
                        
                               
                   <br>
                       
<span class="event" id="a" draggable="true">                   a <img  id="dragme"        src="./images/P1B.png" class="b" alt="Norway" style="width:30%"></span
                   <br>
<span class="event" id="a" draggable="true">                   b <img  id="dragme"            src="./images/P1B.png" class="b" alt="Norway" style="width:30%"></span
                   <br>
    <span class="event" id="a" draggable="true">               c<img id="dragme"                      src="./images/P1B.png" class="b" alt="Norway" style="width:30%"></span
                   <br>
<span class="event" id="a" draggable="true">                   d<img  class="dragme"                    src="./images/P1B.png" class="b" alt="Norway" style="width:30%"></span
                   <br>
    <span class="event" id="a" draggable="true">               e<img  class="dragme"                   src="./images/P1B.png" class="b" alt="Norway" style="width:30%"></span
                   <br>
    <span class="event" id="a" draggable="true">               f<img class="dragme"                            src="./images/P1B.png" class="b" alt="Norway" style="width:30%"></span
                   <br>
    <span class="event" id="a" draggable="true">               g<img    class="dragme" src="./images/P1B.png" class="b" alt="Norway" style="width:30%"></span
                   <br>
    <span class="event" id="a" draggable="true">               h<img class="dragme"          src="./images/P1B.png" class="b" alt="Norway" style="width:30%"></span
                   <br>
    <span class="event" id="a" draggable="true">               i<img    class="dragme" src="./images/P1B.png" class="b" alt="Norway" style="width:30%"></span
                   <br>
    <span class="event" id="a" draggable="true">               k<img class="dragme"                 src="./images/P1B.png" class="b" alt="Norway" style="width:30%"></span
                   <br>
    <span class="event" id="a" draggable="true">               l<img class="dragme"                 src="./images/P1B.png" class="b" alt="Norway" style="width:30%"></span
                   <br>
    <span class="event" id="a" draggable="true">               m<img class="dragme"  src="./images/P1B.png" class="b" alt="Norway" style="width:30%"></span
                   <br>
    <span class="event" id="a" draggable="true">               n<img class="dragme"               src="./images/P1B.png" class="b" alt="Norway" style="width:30%"></span
                   <br>
    <span class="event" id="a" draggable="true">               o<img  class="dragme"          src="./images/P1B.png" class="b" alt="Norway" style="width:30%">
                   <br>
    <span class="event" id="a" draggable="true">               p<img class="dragme"     src="./images/P1B.png" class="b" alt="Norway" style="width:30%">
                   
                   
                   
                    
                        </td>
                   <td> 23</td>
                   <td> 22</td>
                   <td> 21</td>
                   <td> 20</td>
                   <td> 19</td>
                   <td> 18</td>
                   <td> 17</td>
                   <td> 16</td>
                   <td> 15</td>
                   <td> 14</td>
                   
                   <td> 13
                   
                 
                   </td>
                   
                   
                   
                   
                   
                  
   

    
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                        </tr>
                        </tbody>








  </div>

</div>
1 Answers

You have given same id for all your span tag so your code is not able to find correctly from where to remove image .Instead of that you can use data-attribute and give some unique class to your td where these images are located. Then , you can simply use this class and data-id to detach any element whenever it is dropped.

Demo Code :

$(function() {
  initDragAndDrop();
  $('#addRow').on('click', function() {
    $('#targetTable > tbody:last-child').append('<tr><td></td><td></td><td></td></tr>');
    clearDragAndDrop();
    initDragAndDrop();
  });
});

function clearDragAndDrop() {
  $('.event').off();
  $('table td').off('dragenter dragover drop');
}

function initDragAndDrop() {
  $('.event').on('dragstart', function(event) {
    var dt = event.originalEvent.dataTransfer;
    //add dat-attr and class from where to remove
    dt.setData('Text', $(this).data('id') + "," + $(this).closest("td").attr('class'));

  });
  $('table td').on('dragenter dragover drop', function(event) {
    event.preventDefault();
    if (event.type === 'drop') {
      var data = event.originalEvent.dataTransfer.getData('Text').split(",");
      var data_id = data[0];
      var from_class_to_remove = data[1]
      //find td and span to remove
      de = $("." + from_class_to_remove + "> span[data-id=" + data_id + "]").detach();
      de.appendTo($(this));
    }
  });
}
td span {
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: #09C;
  font-weight: bold;
}

img {
  padding: 10px
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="targetTable" class="b" border="10" bordercolor="blue" id="myT">
  <tbody>
    <tr>

      <td> 1</td>
      <td> 2</td>
      <td> 3</td>
      <td> 4</td>
      <td> 5</td>
      <td> 6</td>
      <td> 7</td>
      <td> 8</td>
      <td> 9</td>
      <td> 10</td>
      <td> 11</td>
      <!--also give someclass to td here-->
      <td class="other">12
        <br>
        <!--use data-id-->
        <span class="event" data-id="a" draggable="true">a
        <img  src="https://i.imgur.com/ZEZLSOo.png" class="b" alt="Norway" style="width:30%" ></span>
        <br>
        <span class="event" data-id="b" draggable="true">          b <img   src="https://i.imgur.com/ZEZLSOo.png" class="b" alt="Norway" style="width:30%"></span>
        <br>
        <span class="event" data-id="c" draggable="true">             c<img       src="https://i.imgur.com/ZEZLSOo.png" class="b" alt="Norway" style="width:30%"></span>
        <br>
        <span class="event" data-id="d" draggable="true">             d<img       src="https://i.imgur.com/ZEZLSOo.png" class="b" alt="Norway" style="width:30%"></span>
        <br>
        <span class="event" data-id="e" draggable="true">             e<img       src="https://i.imgur.com/ZEZLSOo.png" class="b" alt="Norway" style="width:30%"></span>
        <br>
        <span class="event" data-id="f" draggable="true">             f<img       src="https://i.imgur.com/ZEZLSOo.png" class="b" alt="Norway" style="width:30%"></span>
        <br>
        <span class="event" data-id="g" draggable="true">             g<img       src="https://i.imgur.com/ZEZLSOo.png" class="b" alt="Norway" style="width:30%"></span>
        <br>
        <span class="event" data-id="h" draggable="true">             h<img       src="https://i.imgur.com/ZEZLSOo.png" class="b" alt="Norway" style="width:30%"></span>
        <br>
        <span class="event" data-id="i" draggable="true">             i<img       src="https://i.imgur.com/ZEZLSOo.png" class="b" alt="Norway" style="width:30%"></span>


      </td>
    </tr>
    <tr>
      <td class="other1"> 24
        <span class="event" data-id="a" draggable="true">                   a <img  id="dragme" src="https://i.imgur.com/dL3J8XS.jpeg" class="b" alt="Norway" style="width:30%"></span>
        <br/>
        <span class="event" data-id="b" draggable="true">                   b <img  id="dragme"            src="https://i.imgur.com/dL3J8XS.jpeg" class="b" alt="Norway" style="width:30%"></span>
        <br/>
        <span class="event" data-id="c" draggable="true">               c<img id="dragme"                      src="https://i.imgur.com/dL3J8XS.jpeg" class="b" alt="Norway" style="width:30%"></span> <br/>
        <span class="event" data-id="d" draggable="true">               d<img id="dragme"                      src="https://i.imgur.com/dL3J8XS.jpeg" class="b" alt="Norway" style="width:30%"></span> <br/>
        <span class="event" data-id="e" draggable="true">               e<img id="dragme"                      src="https://i.imgur.com/dL3J8XS.jpeg" class="b" alt="Norway" style="width:30%"></span> <br/>
        <span class="event" data-id="f" draggable="true">               f<img id="dragme"                      src="https://i.imgur.com/dL3J8XS.jpeg" class="b" alt="Norway" style="width:30%"></span>

      </td>
      <td> 23</td>
      <td> 22</td>
      <td> 21</td>
      <td> 20</td>
      <td> 19</td>
      <td> 18</td>
      <td> 17</td>
      <td> 16</td>
      <td> 15</td>
      <td> 14</td>
      <td> 13</td>
    </tr>
  </tbody>
</table>

Related