เลือก 'tr' ทั้งหมดยกเว้นอันแรก


257

ฉันจะเลือกtrองค์ประกอบทั้งหมดยกเว้นสิ่งแรกtrในตารางด้วย CSS ได้อย่างไร

ฉันลองใช้วิธีนี้แต่พบว่าใช้ไม่ได้


1
เบราว์เซอร์ใดที่จำเป็นต้องใช้งานร่วมกันได้
Pekka


@ คำถามของ Pekka มีความสำคัญเนื่องจากฉันไม่สามารถคิดวิธีการทำสิ่งนี้โดยใช้ CSS มาตรฐานที่จะทำงานกับ IE เวอร์ชันต่างๆ หากคุณต้องการสนับสนุน IE โซลูชันที่ใช้การได้เพียงอย่างเดียวคือคลาสสำหรับคลาสแรก<tr>และคลาสอื่นสำหรับส่วนที่เหลือของคลาสนั้น
Spudley

ฉันไม่ได้กังวลเกี่ยวกับ IE แต่มันจะทำงานใน FF และ GC

คำตอบ:


466

โดยการเพิ่มคลาสให้กับคลาสแรกtrหรือรายการถัดtrไป ไม่มี crossbrowser ในการเลือกแถวที่คุณต้องการด้วย CSS เพียงอย่างเดียว

อย่างไรก็ตามหากคุณไม่สนใจ Internet Explorer 6, 7 หรือ 8:

tr:not(:first-child) {
    color: red;
}

18
ฉันอยากจะชี้ให้เห็นtr:not(:first-of-type)ว่าเป็นวิธีแก้ปัญหาที่อาจเกิดขึ้นเช่นกันหากคุณกำลังมองหาตัวอย่างแรกของตัวเลือกที่เฉพาะเจาะจงมากกว่าเด็กทั่วไปตัวแรก
Joshua Burns

2
ฉันคิดว่าในปี 2019 เราใช้ IE (น้อยกว่า 0.5% ของผู้ใช้ IE6 ถึง IE10
Webwoman

227

ฉันประหลาดใจที่ไม่มีใครพูดถึงการใช้ combinators พี่น้องซึ่งได้รับการสนับสนุนโดย IE7 และใหม่กว่า:

tr + tr /* CSS2, adjacent sibling */
tr ~ tr /* CSS3, general sibling */

ทั้งคู่ทำงานในลักษณะเดียวกัน (ในบริบทของตาราง HTML ต่อไป) เป็น:

tr:not(:first-child)

1
รอสักครู่ ... นี่เป็นคำตอบที่ยอมรับได้อย่างไร คุณไม่สามารถได้รับ "ทั้งหมด แต่ก่อน" จากคำสั่งนั้นซึ่งเป็นสิ่งที่ OP ขอ tr + tr คุณจะได้รับองค์ประกอบเดียว ฉันเดา tr ~ tr จะให้คุณทั้งหมด (ฉันเดาบางสิ่งบางอย่างเหมือนพ่อแม่: ลูกคนแรก ~ tr) แต่ไม่ได้อยู่ใน syntactically เป็นวิธีที่อ่านไม่ได้:
hairbo

5
@hairbo: tr + tr จะให้คุณ tr ที่ตามหลัง tr อื่นโดยตรง หากคุณมีตารางที่มีสามแถวแถวที่สามจะตามหลังแถวที่สองโดยตรงดังนั้นจะตรงกัน คุณจะได้รับองค์ประกอบเดียวถ้าคุณใช้ tr: ลูกคนแรก + tr แทน ความแตกต่างเพียงอย่างเดียวระหว่าง + และ ~ คือ ~ อนุญาตให้มีองค์ประกอบอื่นจำนวนเท่าใดก็ได้ในระหว่างทั้งสองที่กล่าวถึง
BoltClock

แค่ต้องการเพิ่มelem + elemมันเป็นคำตอบทั่วไปที่ยอดเยี่ยมสำหรับเมื่อองค์ประกอบที่คุณต้องการกำหนดเป้าหมายไม่ใช่ลูกคนเดียว ตัวอย่างเช่นหากมีแท็ก<h2>หลาย<p>แท็กตามมาแท็กแรก<p>ไม่ใช่แท็กย่อยในกรณีนั้น
DisgruntledGoat

27

ทางออกที่ดี แต่ไม่รองรับใน IE

tr:not(:first-child) {css}

วิธีที่สองจะเป็นลักษณะของ tr ทั้งหมดแล้วแทนที่ด้วย css สำหรับลูกคนแรก:

tr {css}
tr:first-child {override css above}

10

เสียงเหมือน 'บรรทัดแรก' ที่คุณพูดถึงคือส่วนหัวของตาราง - ดังนั้นคุณควรนึกถึงการใช้งานtheadและtbodyในมาร์กอัปของคุณ ( คลิกที่นี่ ) ซึ่งจะส่งผลให้มาร์กอัป 'ดีกว่า' (ถูกต้องทางความหมาย ) และง่ายขึ้นเป็นไปได้ข้ามเบราว์เซอร์ที่เป็นมิตรสำหรับการเลือก CSS ( table thead ... { ... })


3

แม้ว่าคำถามจะมีคำตอบที่ดีอยู่แล้ว แต่ฉันก็อยากจะย้ำว่า :first-childแท็กไปที่ประเภทรายการที่แสดงถึงเด็ก ๆ

ตัวอย่างเช่นในรหัส:

<div id"someDiv">
     <input id="someInput1" /> 
     <input id="someInput2" />
     <input id="someInput2" />
</div

หากคุณต้องการส่งผลกระทบเพียงสององค์ประกอบที่สองที่มีระยะขอบ แต่ไม่ใช่องค์ประกอบแรกคุณจะทำ:

#someDiv > input {
     margin-top: 20px;
}
#someDiv > input:first-child{
     margin-top: 0px;
}

นั่นคือเนื่องจากinputs เป็นเด็กคุณจะวางfirst-childในส่วนอินพุตของตัวเลือก


1

ขออภัยฉันรู้ว่านี่เก่า แต่ทำไมไม่ออกแบบองค์ประกอบ tr ทั้งหมดตามที่คุณต้องการทั้งหมดยกเว้นคลาสแรกและคลาส psuedo: ลูกคนแรกที่คุณเพิกถอนสิ่งที่คุณระบุสำหรับองค์ประกอบ tr ทั้งหมด

descriped ที่ดีขึ้นโดยตัวอย่างนี้:

http://jsfiddle.net/DWTr7/1/

tr {
    border-top: 1px solid;
}
tr:first-child {
    border-top: none;   
}

/ พาทริค




0

อาจเป็นคนที่ได้รับประโยชน์ด้านล่างคือสิ่งที่ฉันใช้

ol li:not(:first-child) {
    background: black;
    color: white;
}

-1

คุณสามารถใช้ตัวเลือกคลาสหลอกใน CSS ของคุณเช่นนี้:

.desc:not(:first-child) {
    display: none;
}

ที่จะไม่ใช้คลาสกับองค์ประกอบแรกกับ class .desc

นี่คือตัวอย่างของ JSFiddle: http://jsfiddle.net/YYTFT/และนี่เป็นแหล่งที่ดีในการอธิบายตัวเลือกคลาส pseudo: http://css-tricks.com/pseudo-class-selectors/


1
สิ่งนี้จะไม่ใช้สไตล์กับองค์ประกอบแรกชี้ไป first-childละเว้นคลาส
Fez Vrasta

-3

คุณสามารถสร้างคลาสและใช้คลาสเมื่อคุณกำหนดอนาคตทั้งหมดที่คุณต้องการ (หรือไม่ต้องการ) ให้เลือกโดย CSS

นี้จะทำได้โดยการเขียน

<tr class="unselected">

จากนั้นใน css ของคุณมีบรรทัด (และใช้คำสั่ง text-align เป็นตัวอย่าง):

unselected {
  text-align:center;
}



selected {
  text-align:right;
}

2
ครบทั้งหมดเข้าใจคำถามก่อนตอบ
Ammar Bozorgvar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.