2016-11-16 13 views
2

各行に可変量の<td>要素を持つことができるが、行ごとに最大3 <td>個の要素を持つテーブルがあります。 3より小さい要素を持つ行を選択して変数に代入したいとしたら、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 あなたの代わりに:eq()方法:nth-child()または:nth-of-type()を使用することができますあなたの必要性に応じて。

+1

これは可能な解決策としてUpvotedですが、個人的には 'filter()'を使用しています。また、これは単に子供を見ていないことに注意してください。 ''を3行目の値の周りに置くと、もうキャッチしません。さらなる子要素がある場合、OPは注意する必要があります。 –

+0

@RoryMcCrossan:彼はすでに 'filter'を使用して結果を得ています –

+0

@RoryMcCrossan:それは無効なマークアップになります.....その場合でも' nth-of-type() 'を使用すると問題が解決されるかもしれません。 –

関連する問題