前几天我有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
相反。
还有其他方法可以解决这个问题吗?
注意:很抱歉,如果其中一些没有意义。它在前几天的原始问题中得到了更彻底的解释,并在顶部联系起来。我想保持这篇文章的清洁,因为它询问了一个具体的解决方案,之前的帖子只是想弄清楚出了什么问题。
答案 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();
});