-1

我目前在我的文档中有许多表都在 class 下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();
    }
});

但不幸的是,这是删除每个表头。不只是那些没有内容的。我相信我td用 if 语句错误地调用了该字段,但我不确定如何修复它。我尝试将其称为 as$(this).next('table.grid tbody tr td').length - 1)并且也尝试过closest()操作员无济于事。

4

1 回答 1

1

我不是 100% 确定我了解您隐藏表格的确切要求。我假设“空”表中只有 1 行带有标题信息。任何其他行都会有内容,使该表非空。我决定利用这一点并检查非标题行的数量:

$('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在此处的小提琴中看到这一点。它隐藏了第二个表,因为它没有超出标题的行。

请注意...如果您控制此应用程序的服务器端,则绝对最佳策略是检测空结果集并跳过它,这样您以后就不必清理它了。你可能没有这个选项,所以这可能会帮助你在浏览器中处理它。

如果我误解了您对隐藏内容和时间的需求,请告诉我。

于 2013-06-27T21:07:04.633 回答