【问题标题】:Code to delete rows for a table not working Javascript / HTML删除表格行的代码不起作用Javascript / HTML
【发布时间】:2017-06-06 08:54:43
【问题描述】:

我对以下代码有疑问。如果该行不包含 td 中的肉,我正在尝试从表中删除行。澄清一下,当函数被调用时,它接受了 2。(在表中可以找到肉这个词的地方) 有些行不包含单词肉,x = rows[i].getElementsByTagName("td")[a];可以在该行的 [a] 中找到单词肉。我认为问题出在 x.innerHTML 上,因为我认为它不会返回与 b 进行比较的值。 任何帮助或线索表示赞赏。现在,当单击按钮调用该函数时,什么也没有发生。

function clearTable(a) {
            var table, rows, switching, i, x, c, shouldSwitch;
            table = document.getElementById("Invtable");
            switching = true;
            var b = "meat";

            while (switching){

                switching = false;
                rows = table.getElementsByTagName("tr");

                for (i = 0; i < (rows.length); i++) {
                    shouldSwitch = false;
                    x = rows[i].getElementsByTagName("td")[a];

                    if(x.innerHTML.toLowerCase() !=  b){


                        shouldSwitch= true;
                        break;
                    }
                }
                if (shouldSwitch) {
                    table.deleteRow(i);
                    switching = true;
                }
            }
        }

 var table = "<tr>";
for (var i = 0; i < array.length; i++) {
    table += "<tr>";
    for (var j = 0; j < array[i].length; j++) {
        if (j == 6) {
            table += "<td> <img src='CSV_Photos/" + array[i][j] + "' style ='width:250px;height:250px'>" + "<br>" //every 6th column is a picture 
            + "<center> " + '<button id="btn" onClick="clickMe(\''+ array[i][1] + ',' + array[i][5] + '\')"> Buy / Add To Cart </button> </td>' + "</center>"; //button onclick takes (name+price)
        } else {
            table += "<td>" + array[i][j] + "</td>";
        }
    }
  table += "</tr>";
}

编辑:从 var 表开始,这就是在函数中用 javascript 制作表的方式。

html中的表格代码如下:

<tr><td>1000</td><td>Chicken</td><td>Meat</td><td>Perfect</td><td>Yes</td><td>$2.99</td><td>image</td> </tr>

【问题讨论】:

  • 您能否提供一个示例表(HTML)?
  • 你能发布你的 HTML
  • 当您在调试器中逐步执行此操作时,它在哪里/如何具体失败?发生这种情况时的运行时值是多少?
  • 哦,我忘了调试器了。当它运行时,它说 x 是未定义的。
  • 更具体地说,x 在这一行中未定义 if(x.innerHTML.toLowerCase() != b){

标签: javascript html


【解决方案1】:

问题是您传递了错误的列号作为参数。每行只有两个td,索引从0 开始。所以你必须通过1 作为你的论点:clearTable(1)

我创建了一个简单的表格,以便您可以看到您的函数使用正确的参数。

编辑

我重新创建了包含 6 列的表,并创建了一个运行 onClick 函数的按钮。

   
var table = '<table id="Invtable"><tr><td>Food</td><td>chicken</td><td>Veggies</td><td>Ceral</td><td>Soda</td><td>Water</td></tr><tr><td>Food</td><td>water</td><td>Soda</td><td>Meat</td><td>Water</td><td>Ceral</td></tr><tr><td>Third-Food</td><td>Meat</td><td>Chicken</td><td>Ceral</td><td>Water</td><td>Soda</td></tr></table>';
var btn = '<button onClick="clearTable(1)">Meat</button>';
document.body.innerHTML = table + btn;

//clearTable(1);

function clearTable(a) {
            var table, rows, switching, i, x, c, shouldSwitch;
            table = document.getElementById("Invtable");
            switching = true;
            var b = "meat";

            while (switching){

                switching = false;
                rows = table.getElementsByTagName("tr");
								console.log(rows);
                for (i = 0; i < (rows.length); i++) {
                    shouldSwitch = false;
                    x = rows[i].getElementsByTagName("td")[a];

                    if(x.innerHTML.toLowerCase() !=  b){


                        shouldSwitch= true;
                        break;
                    }
                }
                if (shouldSwitch) {
                    table.deleteRow(i);
                    switching = true;
                }
            }
        }

【讨论】:

  • 不幸的是,这不起作用,当我运行调试器时 x 仍然未定义。
  • 您的代码中的array 是什么?什么时候创建表格?
  • 数组是一个二维数组,每行6列。
  • 你能发一下吗?另外,你是如何调用函数的?它是否内联在 HTML 元素中?
  • HTML 元素正在调用函数 clearTable。这就是 Furthmore 数组是如何使用 csv 文件创建的大数组。但本质上,[0][0] 是 1000,[0][1] 是鸡肉,[0][2] 是肉,[0][3] 一直到 [0][6] 是别的东西。这基本上还在继续,但数组中的元素当然不一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-23
相关资源
最近更新 更多