清理空表时出现逻辑错误

Logic Error Cleaning up Empty Tables

本文关键字:错误      更新时间:2023-09-26

我的文档中有许多表,都在类table.grid下。我试图浏览并删除任何没有<td>字段的表头,即生成的没有结果的空表/表。表头的表类的继承结构是table.grid tbody tr.header th,td随后是table.grid tbody tr td。目前我的代码如下:

$('table.grid tbody tr.header th').each(function (i) {
    var remove = 0;
    var tds = $(this).parents('tbody').find('tr td:nth-child(' + (i + 1) + ')');
    tds.each(function (j) {
        if (this.innerHTML == '') remove++;
    });
    if (remove == ($('table.grid tbody tr td').length - 1)) {
        $(this).hide();
        tds.hide();
    }
});

但不幸的是,这会删除每个表头。不仅仅是那些没有内容的人。我相信我的if语句调用td字段不正确,但我不确定如何修复它。我曾尝试将其调用为$(this).next('table.grid tbody tr td').length - 1),也尝试过closest()运算符,但都没有成功。

我不能100%确定我是否理解您隐藏表的确切要求。我假设一个"空"表中只有一行包含标题信息。任何其他行都将包含内容,从而使该表不为空。我决定利用这一点并检查非标题行的数量:

$('table.grid').each(function (i) {
    //Select all rows in this table that aren't .header
    var rows = $(this).find("tr").not(".header");
    if (rows.length == 0)
    {
        //no rows except for header - hide the table.
        $(this).hide();
    }
});

您可以使用您提供的HTML在这里看到这一点。它隐藏了第二个表,因为它在标题之外没有行。

只是一张纸条。。。如果您控制这个应用程序的服务器端,那么最好的策略就是检测一个空的结果集并跳过它,这样以后就不必清理它了。你可能没有这个选项,所以这可能有助于你在浏览器中处理它。

如果我误解了你需要隐藏什么以及何时隐藏,请告诉我。