如何隐藏包含多个空单元格的行?

时间:2011-07-13 01:28:43

标签: jquery

对于下表,row2和row3有多个空单元格(<td></td>),如何使用jQuery检查表中的每一行是否有多个空单元格,而不是相应地隐藏该行?

更新:

如果我想检查每一行(td)是否包含多于一个包含JUST witespace的单元格(td),而不是隐藏该行?

由于

<table>
<tr class="row1">
<td>a</td>
<td>b</td>
<td>c</td>
<td>d</td>
</tr>
<tr class="row2">
<td>a</td>
<td>b</td>
<td></td>
<td></td>
</tr>
<tr class="row3">
<td></td>
<td></td>
<td>c</td>
<td></td>
</tr>
...
<tr class="row100">
<td>a</td>
<td>b</td>
<td>c</td>
<td></td>
</tr>
</table>

3 个答案:

答案 0 :(得分:4)

  

如何使用jQuery检查表中的每一行是否有超过2个空单元格,而不是相应地隐藏该行?

您可以使用filter()

$('table tr').filter(function() {
    return $(this).children('td:empty').length > 2;
}).hide();

jsFiddle

更新

  

如果我想检查每一行(td)是否包含多于一个包含JUST空格的单元格(td),那么隐藏该行?

认为这就是你现在想要的......

$('table tr').filter(function() {
    var valid = $(this).children('td').filter(function() { 
        return ! $(this).text().replace(/\s/g, '').length;
    }).length;

    return valid > 1;
}).hide();

jsFiddle

答案 1 :(得分:1)

在实际使用中,“空”单元格通常包含各种空格。 EG:<td> </td><td> \n </td><td>&nbsp;</td><td class="Invalid"></td>See how easy it is to break

更强大的解决方案处理现实生活中的HTML:

$('table tr').filter ( function () {
    var blankCells  = $(this).html ().match (/<td[^<>]*>(?:\s|&nbsp;)*<\/td>/ig);
    var numBlank    = blankCells ? blankCells.length : 0;
    return numBlank > 1;
} ).hide ();


See the demo at jsFiddle.

请注意,对于大多数实际情况,此解决方案可能很好,但由于它使用正则表达式来解析DOM(甚至一点点),如果HTML编码不佳,最终可能会显示额外的行。

答案 2 :(得分:0)

$("tr").each(function() {
  var i = 0;
  $(this).children("td").each(function() {
    if (!$(this).html()) {
      i++;
    }
    if (i > 2) {
      $(this).parent().hide();
      return false;     
    }
  });
});

jsfiddle:http://jsfiddle.net/fT9VQ/1/

Alex的回答可能更好。