2016-11-16 99 views
2

我有一个表格,每行可以有可变数量的<td>元素,但每行元素的最大值为3 <td>。假设我想选择少于3 <td>元素的行,并将它们分配给一个变量,有没有办法只用jQuery来选择这些行?我知道我可以用的东西,我的每一行迭代,就像这样:获取所有父元素少于n个子元素的jQuery选择器

var rows = $("tr").filter(function() { 
 
    return $(this).children().length < 3 
 
}); 
 

 
rows.css("background-color", "blue");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table> 
 
    <tbody> 
 
    <tr> 
 
     <td>1</td> 
 
     <td>2</td> 
 
     <td>3</td> 
 
    </tr> 
 
    <tr> 
 
     <td>1</td> 
 
    </tr> 
 
    <tr> 
 
     <td>1</td> 
 
     <td>2</td> 
 
    </tr> 
 
    </tbody> 
 
</table>

有没有一种方法可以让我做同样只用jQuery选择和方法(例如.siblings().parents()) ?

Here's JSFiddle我给出的例子。我找过一个类似的问题,但找不到像这样的东西,所以我希望有人会有一些想法,如果这是可能的。

+0

你意识到没有colspan这是无效的html?每个表格行必须具有相同的列数... –

+0

@Iwrestledabearonce。是的,我意识到这一点。我可能应该将这些属性添加到html,但我只是得到一个简单的示例来显示。 –

回答

6

使用组合:not(),:has():eq()伪类选择器。

var rows = $("tr:not(:has(:eq(2)))"); 
 

 
rows.css("background-color", "blue");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table> 
 
    <tbody> 
 
    <tr> 
 
     <td>1</td> 
 
     <td>2</td> 
 
     <td>3</td> 
 
    </tr> 
 
    <tr> 
 
     <td>1</td> 
 
    </tr> 
 
    <tr> 
 
     <td>1</td> 
 
     <td>2</td> 
 
    </tr> 
 
    </tbody> 
 
</table>


FYI:根据您的需求,您可以使用的:nth-child():nth-of-type()代替:eq()方法。

+1

Upvoted,因为它是一个可能的解决方案,但我个人会使用'filter()' - 它更容易读取。还要注意,这不仅仅是看孩子。如果你在第三行的值附近放置一个'',它就不会被捕获。如果还有子元素,则OP需要保持警惕。 –

+0

@RoryMcCrossan:他已经使用'filter'实现了结果 –

+0

@RoryMcCrossan:这将使其无效标记.....即使在这种情况下使用'n-type()'来代替可以解决问题 –