CSSを使用して特定の数の子を取得するにはどうすればよいですか?


270

私が持っているtableそのtdsの動的に作成されています。最初と最後の子を取得する方法は知っていますが、私の質問は次のとおりです。

CSSを使用して2番目または3番目の子を取得する方法はありますか?

回答:


398

最新のブラウザでtd:nth-child(2)は、2番目tdtd:nth-child(3)3番目のブラウザに使用します。これらtd はすべての行の 2番目と3番目取得することに注意してください。

バージョン9より前のIEとの互換性が必要な場合は、Timの提案に従って兄弟コンビネーターまたはJavaScriptを使用してください。彼の方法の説明と図については、この関連する質問に対する私の回答も参照してください。


19
これはCSS 3セレクターでのみ機能することを忘れないでください(つまり、9より前のバージョンのIEでは機能しません)。
zneak


2
一般的な解決策としてtd:nth-of-type(3)は、より良いです。td:nth-child(3)ある要素と一致します両方 A td 、その親の3番目の子を関係なく、その前の2人の兄弟の要素タイプのtd:nth-of-type(3)第三になりますtd関係なく、どのように多くの非のtd要素がその前にあります。目的のtd要素の前に非要素がない場合、両方のセレクターが同じものに一致します。
CJデニス

232

IE 7および8(およびIE6を含まないCSS3サポートのない他のブラウザー)の場合、次を使用して2番目と3番目の子を取得できます。

2番目の子:

td:first-child + td

3番目の子:

td:first-child + td + td

次に+ td、選択する子ごとに別の子を追加します。

IE6もサポートしたい場合は、それも可能です!小さなJavaScript(この例ではjQuery)を使用するだけです。

$(function() {
    $('td:first-child').addClass("firstChild");
    $(".table-class tr").each(function() {
        $(this).find('td:eq(1)').addClass("secondChild");
        $(this).find('td:eq(2)').addClass("thirdChild");
    });
});

次に、CSSでこれらのクラスセレクターを使用して、好きな変更を加えます。

table td.firstChild { /*stuff here*/ }
table td.secondChild { /*stuff to apply to second td in each row*/ }

19
IE7 / 8のヒントをありがとう。よく働く。
Brendon Crawford

2
私の答えのCSS3セレクターまたはあなたのCSS2セレクターをjQueryに直接ドロップすると、IE6で自然に動作します。クラスを追加するためにこれらすべての追加のフープをジャンプする必要はありません。
BoltClock
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.