我有一个看起来像这样的表格
R1C1 R1C2 R1C3
R2C1 R2C2 R2C3
R3C1 R3C2 R3C3
以及一个在找到特定单元格值时从表中删除行的函数。效果很好,请参阅下面的函数代码,结果是第 1 行和第 3 行被删除
但是,当我想做相反的事情时 - 通过将比较运算符从 0 更改为 -1(如果找不到字符串,indexOf() 返回什么),仅保留包含指定单元格值的行,函数删除所有行,而不是像我预期的那样删除第 2 行。
任何人都可以阐明这一点,并为我提供如何实现我想要的解决方案吗?
函数代码如下:
function doFunction() {
let array = ['R3C2','R1C3'];
for (var i = 0; i < array.length; i++) {
var removeRowWithCell = array[i];
// change the comparison below to === -1 and it deletes all rows
$('td').filter(function() {
return $(this).text().indexOf(removeRowWithCell) === 0;
}).closest('tr').remove();
}
}
最佳答案
=== -1 的条件转换为“至少有一个单元格不等于‘R3C2’或‘R1C3’的行”。
考虑到这一点(仅每行的第一个单元格与数组“R3C2”分析中的第一项进行比较):
第 1 行单元格 R1C1:"R1C1".indexOf("R3C2") 为 -1 => 单元格被选中,行被删除
第 2 行单元格 R2C1:"R2C1".indexOf("R3C2") 为 -1 => 单元格被选中,行被删除
第 3 行单元格 R3C1:"R2C1".indexOf("R3C2") 为 -1 => 单元格被选中,行被删除
因此,您最终会删除所有行
保留包含数组中某些值的行的函数应如下所示:
function doFunction() {
let array = ['R3C2','R1C3'];
var rows = $('tr');
for(var k = 0; k < rows.length; k++) {
var currentRow = $(rows[k]);
var columns = currentRow.find('td');
var shouldKeepRow = false;
for (var i = 0; i < array.length; i++) {
var removeRowWithCell = array[i];
// Check if at least one column on this row contains this value
shouldKeepRow = columns.filter(function() {
return $(this).text().indexOf(removeRowWithCell) === 0;
}).length > 0;
if (shouldKeepRow) {
break;
}
}
if (!shouldKeepRow) {
currentRow.remove();
}
}
}
关于javascript - 如何从表中删除不等于某个值的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55830060/