$("table#" + Grid + " > tbody > tr").each(function () {
ParentID = $(this).find("td:eq(0) input:checkbox").val();
ParentManufacturer = $(this).find("td:eq(2)").html();
$("table#" + Grid + " > tbody > tr").each(function () {
ChildID = $(this).find("td:eq(0) input:checkbox").val();
ChildManufacturer = $(this).find("td:eq(2)").html();
if (ParentID != ChildID && ParentManufacturer == ChildManufacturer) {
$(this).remove();
}
});
});
问题是删除的表行仍然在进行循环。例如。即使我已经用manucafturer名称'AAA'删除了表格行,这一行仍然在循环中。希望你明白我的意思。所以,最终的结果是空表。你能帮我修一下这个问题吗?
答案 0 :(得分:2)
您有两个重要问题:
当查看行“n”时,您只需要比较从行“n + 1”开始的其他行,而不是从行开始
从DOM中删除元素不会将它们从您当前正在迭代的jQuery对象中删除...
以下代码似乎有效。它依次查看每一行,然后如果第二个单元格具有相同的内容,则使用类.nextAll('tr')
标记任何后续行 - remove
。然后它会完成所有DOM删除。
// get all rows
var $tr = $("table#" + Grid + " > tbody > tr");
// then for each row
$tr.each(function() {
if ($(this).hasClass('remove')) return; // we already did this value
var val = $(this.cells[1]).text(); // get current row's value
// tag matching following rows
$(this).nextAll('tr').not('.remove').filter(function() {
return $(this.cells[1]).text() === val;
}).addClass('remove');
});
// now remove the tagged rows
$tr.filter('.remove').remove();
的工作演示
答案 1 :(得分:0)
你可以改用while循环, 你必须先将数据保存在一个数组中,然后自己迭代它。 当然,你需要另一个布尔表达式来比较它们是否符合你的标准。
var a=[1,2,3,4,5,4,3,2,1];
var i=0;
while(a.length > 0 && i<a.length){
console.log("check elem:" + a[i]);
var j=i+1;
var double = false;
while(j < a.length ){
if(a[i]==a[j]){
a.splice(j,1);
double=true;
} else {
j++;
}
}
if(double){
a.splice(i,1);
} else {
i++;
}
}
在这个例子中,只剩下5个数组
在上面的jsfiddle中安装了我的解决方案 http://jsfiddle.net/ZzsTt/19/
var Grid = "table";
// get all rows
var rows = $("table#" + Grid + " > tbody > tr");
rows = $.makeArray(rows);
var i=0;
while(rows.length > 0 && i<rows.length){
var j=i+1;
var double = false;
var val = $(rows[i].cells[1]).text();
while(j < rows.length ){
if( $(rows[j].cells[1]).text() == val ){
$(rows[j]).addClass("remove");
//$(rows[j]).remove();
rows.splice(j,1);
//uncomment statement below to have all elements which occur more than once
//otherwise first stays
//double=true;
} else {
j++;
}
}
if(double){
$(rows[j]).addClass("remove");
//$(rows[i]).remove();
rows.splice(i,1);
} else {
i++;
}
}