Як я можу отримати конкретну дитину за допомогою CSS?


270

У мене є tableчийtd s створюються динамічно. Я знаю, як отримати першу та останню дитину, але моє питання:

Чи є спосіб отримати другу або третю дитину за допомогою CSS?

Відповіді:


398

Для сучасних браузерів використовуйте td:nth-child(2)для другого td, а td:nth-child(3)для третього. Пам'ятайте, що вони отримують другий і третій td для кожного ряду .

Якщо вам потрібна сумісність з IE, старшою за версію 9, використовуйте комбінатори братів і сестер або JavaScript, як запропонував Тім . Також дивіться мою відповідь на це пов'язане питання для пояснення та ілюстрації його методу.


19
Не забувайте, що це працює лише з селекторами CSS 3 (іншими словами, не у версіях IE до 9).
zneak


2
Як загальне рішення, td:nth-of-type(3)краще. td:nth-child(3)буде відповідати елементу, який є і a, td і третім дочкою свого батька, незалежно від типів елементів двох попередніх побратимів . td:nth-of-type(3)отримає третє td, незалежно від того, скільки неелементів tdдо цього . Якщо tdперед тим, що потрібно, немає неелементів, обидва селектори будуть відповідати одному і тому ж.
CJ Dennis

232

Для IE 7 і 8 (та інших браузерів, які не підтримують CSS3, не включаючи IE6), ви можете використовувати наступні для отримання 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. Чудово працює.
Брендон Крофорд

2
Ви можете взяти CSS3-селектори в моїй відповіді або CSS2-селектори у вашій і передати їх прямо у jQuery, і вони працюватимуть природно в IE6. Не потрібно перестрибувати всі ці додаткові обручі, щоб додати класи.
BoltClock
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.