jQuery在使用rowspan时选择列中的最后一个单元格

时间:2010-12-09 20:35:45

标签: javascript jquery css-selectors html-table

我有一张这样的表:

<table>
    <tr><td>Not This</td><td rowspan="3">This</td></tr>
    <tr><td>Not This</td></tr>
    <tr><td>Not This</td></tr>
    <tr><td>Not This</td><td>This</td></tr>
</table>

如何在每行中选择最右边的单元格(包含“This”),以便设置边框颜色?

我尝试过类似的事情:

table.find('tr > td:last-child').addClass('someclass');

但是,即使它们不是最右边的单元格,它也会选择第2行和第3行的最后一个单元格。

我没有在桌子上使用边框折叠,并且宁愿避免使用它。

4 个答案:

答案 0 :(得分:3)

这个需要一些诡计:

$(function() {
    $('td:last-child[rowspan]').each(function() {
        $(this).parent().nextAll().slice(0,$(this).attr('rowspan')-1).addClass('skip');
    });
    $('tr:not(.skip) > td:last-child').addClass('someclass');
    $('.skip').removeClass('skip');
});

因此,您首先要查找最后一个子节点并具有rowspan属性的任何td。迭代这些,在每个行之后计算行,并为每个行添加一个类以“跳过”它们。然后将类添加到不在“跳过”行的最后子单元格中,最后删除跳过类。

在这里演示:http://jsfiddle.net/Ender/rzqEr/

答案 1 :(得分:1)

你可以选择这样的东西,如果你有很多行,可能是一个昂贵的查找:

$('table tr').each(function(){

  if( $('td',this).size() > 1 ){
    $(this).find('td:last-child').addClass('someclass');
  };

});

Here's a JSBin demo

你也可以这样做,取自Spolto的例子:

$('table tr').each(function(){

  $('td:gt(0)',this).addClass('someclass');

});

Another JSBin demo

答案 2 :(得分:1)

你应该可以像这样跳过第一个<td>

$("table tr td:gt(0)").addClass('someclass');

答案 3 :(得分:0)

这应该有效:

$("TD ~ TD:last-child").addClass('someclass');

设置表格本身的边框也可能有效。