2017-02-14 16 views
0

我前幾天有this question,我不想重複一遍這裏的細節。需要幫助修復一個跳過每個其他項目的循環(JavaScript,JQuery)

本質上,我寫了一個循環遍歷表中的每一行並刪除按鈕。問題在於它由於某種原因正在跳過行。

我最終得出結論認爲,這是因爲每次刪除按鈕時,循環都會有一個按鈕/行循環通過,並且會丟棄循環的索引。

爲了解決這個問題,我創建了一個fixer數字,每次刪除一個按鈕時都會增加1,以抵消索引被甩掉和跳過。然後,當它循環時,它會從索引中減去fixer的數量,因此它總是處於正確的軌道上。

$(document).on('draw.dt', function() { 
    var $allSerialNumbers = $('.box-electrode'); 
    var fixer = 0; 
    $('#electrodes li').each(function (i, li) { 
     var $id = $(li).data('id'); 
     for (var index = 0; index < $allSerialNumbers.length; index++) { 
      if ($id == $allSerialNumbers.eq(index).attr('data-id')) { 
       $('.box-electrode').eq(index - fixer).remove(); 
       fixer++; 
       break; 
      } 
     } 
    }) 
}); 

這個作品真的很好,當你刪除升序排列按鈕(例如:我刪除按鈕1,2和3),但它現在跳過行,如果我向後刪除(我刪除按鈕3,2,然後1)。

這是我之前完全相反的問題,我可以按降序刪除按鈕,事情會很好,但不會提升。現在它與我的fixer相反。

有沒有其他方法可以解決這個問題?

注意:對不起,如果這一些沒有意義。從前一天的原始問題中可以更詳細地解釋,並在頂部連接。我想保留這篇文章,因爲它提出了一個特定的解決方案,而前一篇文章只是想弄清楚什麼是錯的。

+0

你可以在問題中包含'html'嗎?什麼是要求? – guest271314

回答

0

一個更簡單的方法是使用屬性作爲選擇的filter()

var $allSerialNumbers = $('.box-electrode'); 

$('#electrodes li').each(function (i, li) { 
    var id = $(li).data('id'); 
    $allSerialNumbers.filter('[data-id="' + id + '"]').remove(); 
}); 
+0

完美地工作,比我想要的要簡單得多。謝謝! –

0

爲什麼不是所有的元素保存在循環並在循環結束,然後將它們全部刪除:

var toDelete = []; 
    $('#electrodes li').each(function (i, li) { 
      var $id = $(li).data('id'); 
      for (var index = 0; index < $allSerialNumbers.length; index++) { 
       if ($id == $allSerialNumbers.eq(index).attr('data-id')) { 
        toDelete.push($('.box-electrode').eq(index)) 
        break; 
       } 
      } 
     }) 
    toDelete.forEach(function(element){ 
     element.remove(); 
    })