需要帮助修复一个跳过其他项目的循环(JavaScript,JQuery)

时间:2017-02-14 22:35:20

标签: javascript jquery html loops

前几天我有this question,我宁愿不再重复这里的细节。

基本上我写了一个循环,遍历表中的每一行并删除按钮。问题在于它出于某种原因正在跳过行。

我最终得出结论,这是因为每次删除一个按钮时,循环只需要少一个按钮/行来循环,然后抛出循环索引。

为了解决这个问题,我创建了一个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相反。

还有其他方法可以解决这个问题吗?

注意:很抱歉,如果其中一些没有意义。它在前几天的原始问题中得到了更彻底的解释,并在顶部联系起来。我想保持这篇文章的清洁,因为它询问了一个具体的解决方案,之前的帖子只是想弄清楚出了什么问题。

2 个答案:

答案 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();
    })

答案 1 :(得分:0)

更简单的方法是将该属性用作filter()

中的选择器
var $allSerialNumbers = $('.box-electrode');

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