ฉันมีสิ่งtableที่tdถูกสร้างขึ้นแบบไดนามิก ฉันรู้วิธีรับลูกคนแรกและลูกคนสุดท้าย แต่คำถามของฉันคือ:
มีวิธีรับลูกที่สองหรือสามโดยใช้ CSS หรือไม่?
ฉันมีสิ่งtableที่tdถูกสร้างขึ้นแบบไดนามิก ฉันรู้วิธีรับลูกคนแรกและลูกคนสุดท้าย แต่คำถามของฉันคือ:
มีวิธีรับลูกที่สองหรือสามโดยใช้ CSS หรือไม่?
คำตอบ:
สำหรับเบราว์เซอร์ที่ทันสมัยให้ใช้td:nth-child(2)สำหรับที่สองtdและtd:nth-child(3)ที่สาม โปรดจำไว้ว่าสิ่งเหล่านี้เรียกที่สองและสามสำหรับทุกแถวtd
หากคุณต้องการความเข้ากันได้กับ IE ที่เก่ากว่ารุ่น 9 ให้ใช้ sibling combinators หรือ JavaScript ตามที่ Timแนะนำ ดูคำตอบของฉันสำหรับคำถามที่เกี่ยวข้องสำหรับคำอธิบายและภาพประกอบของวิธีการของเขา
td:nth-of-type(3)ดีกว่า td:nth-child(3)จะตรงกับองค์ประกอบที่เป็นทั้งtd และเด็กที่สามของแม่ของตนโดยไม่คำนึงถึงประเภทองค์ประกอบของสองพี่น้องก่อนหน้านี้ td:nth-of-type(3)จะได้รับที่สามtd, โดยไม่คำนึงถึงไม่ใช่วิธีการหลายtdองค์ประกอบก่อนที่มันจะ หากไม่มีtdองค์ประกอบที่ไม่ใช่ก่อนที่คุณต้องการตัวเลือกทั้งสองจะตรงกับสิ่งเดียวกัน
สำหรับ IE 7 & 8 (และเบราว์เซอร์อื่น ๆ ที่ไม่มีการสนับสนุน CSS3 ไม่รวม IE6) คุณสามารถใช้สิ่งต่อไปนี้เพื่อรับลูกที่ 2 และ 3:
ลูกคนที่สอง:
td:first-child + td
ลูกคนที่สาม:
td:first-child + td + td
จากนั้นเพิ่มอีกหนึ่งรายการ+ tdสำหรับเด็กเพิ่มเติมแต่ละคนที่คุณต้องการเลือก
หากคุณต้องการรองรับ IE6 ก็สามารถทำได้เช่นกัน! คุณเพียงแค่ต้องใช้จาวาสคริปต์ (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*/ }