对于下表,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>
答案 0 :(得分:4)
如何使用jQuery检查表中的每一行是否有超过2个空单元格,而不是相应地隐藏该行?
您可以使用filter()
。
$('table tr').filter(function() {
return $(this).children('td:empty').length > 2;
}).hide();
如果我想检查每一行(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();
答案 1 :(得分:1)
在实际使用中,“空”单元格通常包含各种空格。 EG:<td> </td>
,<td> \n </td>
,<td> </td>
,<td class="Invalid"></td>
等
See how easy it is to break?
更强大的解决方案处理现实生活中的HTML:
$('table tr').filter ( function () {
var blankCells = $(this).html ().match (/<td[^<>]*>(?:\s| )*<\/td>/ig);
var numBlank = blankCells ? blankCells.length : 0;
return numBlank > 1;
} ).hide ();
请注意,对于大多数实际情况,此解决方案可能很好,但由于它使用正则表达式来解析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的回答可能更好。