Javascript 如何从表中删除不等于某个值的行?
我有一张像这样的桌子Javascript 如何从表中删除不等于某个值的行?,javascript,jquery,Javascript,Jquery,我有一张像这样的桌子 R1C1 R1C2 R1C3 R2C1 R2C2 R2C3 R3C1 R3C2 R3C3 以及一个函数,该函数在找到特定单元格值时从表中删除一行。这很好,请参见下面的函数代码,结果是删除了第1行和第3行 但是,当我想做相反的事情时——通过将比较运算符从0更改为-1(如果找不到字符串,indexOf()将返回什么),只保留包含指定单元格值的行,该函数将删除所有行,而不是我所期望的行2 有谁能解释一下这一点,并为我提供一个如何实
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();
}
}
函数doFunction(){
让数组=['R3C2','R1C3'];
对于(var i=0;i
这是因为您首先查找R3C2
并删除所有其他内容,下一次遍历循环时,您将搜索R1C3
,但只有R3C2
存在,并且将被删除。您的===-1条件转换为“至少有一个单元格不等于“R3C2”或“R1C3”的行”
记住这一点(与数组“R3C2”分析中的第一项相比,每行只有第一个单元格):
- 第一行单元格R1C1:“R1C1”。indexOf(“R3C2”)为-1=>选中单元格后,将删除该行
- 第二行单元格R2C1:“R2C1”。indexOf(“R3C2”)为-1=>选中单元格后,将删除该行
- 第三行单元格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();
}
}
}
函数doFunction(){
让数组=['R3C2','R1C3'];
变量行=$('tr');
对于(var k=0;k0;
如果(应该保持前进){
打破
}
}
如果(!shouldKeepRow){
currentRow.remove();
}
}
}
这是一个VanillaJS版本。也许这就是你想要的
let table=document.querySelector(“表”),
tBody=表.tBodies[0];
让数组=['R3C2','R1C3'];
数组.from(tBody.rows).forEach(函数(row){
让包含=假;
for(行中的let单元格。单元格){
if(array.indexOf(cell.innerText)!=-1){
包含=真;
打破
}
}
如果(!包含){
row.parentNode.removeChild(row);
}
});代码>
R1C1
R1C2
R1C3
R2C1
R2C2
R2C3
R3C1
R3C2
R3C3
使用jQuery.inArray可以更轻松
function doFunction() {
let array = ['R3C2','R1C3'];
var rows = $('tr');
for (var j = 0; j < rows.length; j++) {
for (var i = 0; i < array.length; i++) {
var cells = $(rows[j]).children('td').map(function() { return $(this).text(); });
if($.inArray(array[i], cells) === -1){
$(rows[j]).remove();
}
}
}
}
函数doFunction(){
让数组=['R3C2','R1C3'];
变量行=$('tr');
对于(var j=0;j
indexOf
从数组返回位置。如果它是-1
,则表示不存在匹配项,但如果指定0
,则应将其作为第一个元素。在您的情况下,我相信您需要返回$(this).text().indexOf(RemoveOwWithCell)!=-1
要使用。查找与数组中任何元素匹配的所有行,然后删除它们。请参阅。我不确定我是否理解:我要做的是删除所有不匹配的元素?这听起来符合多个条件,但即使我将数组减少为仅1个元素,例如R1C3,它也会删除所有行,而不是第2行和第3行?