如果与jQuery重复,如何从数组中删除一个元素?

时间:2017-11-20 13:01:59

标签: javascript jquery arrays

这是我的问题:如果我尝试擦除我用相对按钮推送的最后一个元素,一切正常,但如果我尝试擦除第一个(或至少不是最后一个),则数组中的所有元素被删除了。

为了避免这种情况,我使用$ .inArray检查元素是否在数组中,并且只删除该索引中的元素,但它没有帮助。

我想要的是能够删除我想要的元素,只删除我选择的元素。



$(document).ready(function() {
  var array = [];

  $('.add').click(function(e) {
    var $thisEvent = $(e.currentTarget).closest('.event');
    var i = $thisEvent.find('.i').text();
    array.push(i);
    console.log(i +' added, Array is now ' + array);  
    $thisEvent.append('<button class="remove">' + i + '</button>');
    
    var $total = 0;
    for (var y = 0; y < array.length; y++) {
       $total += array[y] << 0;
    }
    
    $('.total').html('The sum of the elements in the array is ' + $total);
    
    $('.remove').click(function() {
      if ($.inArray(i, array) !== -1) {
        array.splice($.inArray(i, array), 1);
        console.log(i + ' removed, Array is now ' + array);
      } else {
        console.log('There is no ' + i + ' to remove from the array!');
      }
      $(this).remove();
      
      var $total = 0;
      for (var y = 0; y < array.length; y++) {
       $total += array[y] << 0;
      }
      
      $('.total').html('The sum of the elements in the array is ' + $total);
    }); 
  });    
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="event">
  <span class="i" style="margin-right: 5px;">1</span><button class="add">Add to Array</button>
</div>
<br />
<div class="event">
  <span class="i" style="margin-right: 5px;">2</span><button class="add">Add to Array</button>
</div>
<br />
<div class="event">
  <span class="i" style="margin-right: 5px;">3</span><button class="add">Add to Array</button>
</div>
<p class="total"></p>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

尝试更改

var $remove = $('<button class="remove">' + i + '</button>');
$thisEvent.append($remove);

$('.remove').click(function() {

然后改变

$remove.click(function() {

state:"RUNNING" OR state:"FAILED"

这样,每次添加新按钮时,您都不会向所有其他删除按钮添加新的点击事件监听器