2016-11-16 92 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()'來代替可以解決問題 –