Làm thế nào tôi có thể có được một số con cụ thể bằng CSS?


270

Tôi có một tablengười tdđược tạo ra một cách năng động. Tôi biết làm thế nào để có được đứa con đầu tiên và cuối cùng nhưng câu hỏi của tôi là:

Có cách nào để có được đứa con thứ hai hoặc thứ ba bằng CSS không?

Câu trả lời:


398

Đối với các trình duyệt hiện đại, sử dụng td:nth-child(2)cho thứ hai tdtd:nth-child(3)thứ ba. Hãy nhớ rằng những cái này lấy thứ hai và thứ ba td cho mỗi hàng .

Nếu bạn cần khả năng tương thích với IE cũ hơn phiên bản 9, hãy sử dụng các trình kết hợp anh chị em hoặc JavaScript theo đề xuất của Tim . Cũng xem câu trả lời của tôi cho câu hỏi liên quan này để được giải thích và minh họa về phương pháp của mình.


19
Đừng quên rằng điều này chỉ hoạt động với các bộ chọn CSS 3 (nói cách khác, không phải trong các phiên bản IE trước 9).
zneak


2
Là một giải pháp chung, td:nth-of-type(3)là tốt hơn. td:nth-child(3)sẽ phù hợp với một yếu tố đó là cả một td con thứ tư của mẹ, không phụ thuộc vào loại yếu tố của hai anh chị em trước đây của nó . td:nth-of-type(3)sẽ có được phần ba td, bất kể có bao nhiêu tdphần tử không nằm trước nó . Nếu không có tdphần tử nào trước phần tử bạn muốn, cả hai bộ chọn sẽ khớp với cùng một thứ.
CJ Dennis

232

Đối với IE 7 & 8 (và các trình duyệt khác không hỗ trợ CSS3 không bao gồm IE6), bạn có thể sử dụng các cách sau để có được con thứ 2 và thứ 3:

Con thứ 2:

td:first-child + td

Con thứ 3:

td:first-child + td + td

Sau đó, chỉ cần thêm một cái khác + tdcho mỗi đứa trẻ bổ sung mà bạn muốn chọn.

Nếu bạn muốn hỗ trợ IE6 cũng có thể được thực hiện! Bạn chỉ cần sử dụng một ít javascript (jQuery trong ví dụ này):

$(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");
    });
});

Sau đó, trong css của bạn, bạn chỉ cần sử dụng các bộ chọn lớp đó để thực hiện bất kỳ thay đổi nào bạn muốn:

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

19
Cảm ơn bạn cho mẹo IE7 / 8. Công trình tuyệt vời.
Brendon Crawford

2
Bạn có thể lấy các bộ chọn CSS3 trong câu trả lời của tôi hoặc bộ chọn CSS2 trong bộ của bạn và thả chúng ngay vào jQuery và chúng sẽ hoạt động tự nhiên trong IE6. Không cần phải nhảy qua tất cả các vòng bổ sung để thêm các lớp.
BoltClock
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.