ไม่ใช่ตัวเลือกคลาสใน jQuery


270

มีนิพจน์ตัวเลือกอย่างง่าย ๆ ที่จะไม่เลือกอิลิเมนต์ที่มีคลาสเฉพาะหรือไม่?

<div class="first-foo" />
<div class="first-moo" />
<div class="first-koo" />
<div class="first-bar second-foo" />

ฉันแค่อยากได้สามตัวแรกและลอง

$(div[class^="first-"][class!="first-bar"])

แต่สิ่งนี้จะได้รับทั้งหมดเนื่องจาก div ล่าสุดมีมากกว่าแถบแรก มีวิธีใช้ตัวแทนในการแสดงออกเช่นนี้หรือไม่ อะไรแบบนั้น

$(div[class^="first-"][class!="first-bar*"]) // doesn't seem to work

ตัวเลือกอื่นใดที่อาจช่วยได้?


เกาความคิดเห็นก่อนหน้าของฉันฉันเพิ่งอ่านคำถามอีกครั้ง first-barชั้นที่สำคัญคือ
BoltClock

ในกรณีที่ต้องการเลือกองค์ประกอบทั้งหมดที่ไม่มี class1 หรือ class2 การต่อข้อมูลอาจใช้งานได้:$('div[class^="first-"]').not('.class1').not('.class2')
J0ANMM

คำตอบ:


543

คุณต้องการ:not()ตัวเลือก:

$('div[class^="first-"]:not(.first-bar)')

หรืออีก.not()วิธีคือ:

$('div[class^="first-"]').not('.first-bar');

91
โปรดทราบว่าเนื่องจาก: not () เร็วกว่า. not () ถึง 2-3 เท่า ( jsperf.com/jquery-css3-not-vs-not ) คุณอาจต้องการใช้: not () อย่างไรก็ตามเอกสาร jQuery แนะนำให้ใช้. not () แทนเนื่องจากสามารถอ่านได้มากขึ้น ( api.jquery.com/not-selector ) หวังว่านี่จะช่วยให้ใครบางคนตัดสินใจระหว่างคนทั้งสอง!
rinogo

2
@rinogo มันเร็วกว่าที่เบราว์เซอร์ส่วนใหญ่สนับสนุนการค้นหา SelectorAll แต่ก็ไม่ได้เป็นเช่นนั้นเสมอไป
lonesomeday

4
ใช่แน่นอน! :) ฉันหวังว่าความคิดเห็นของฉันไม่ได้เป็นคำวิจารณ์; ฉันต้องการเพิ่มคำถามที่เป็นประโยชน์ของคุณ
rinogo

1
ขอบคุณ !! ปิดการใช้งานป้อนรหัสที่สำคัญทั้งหมดยกเว้นกล่องกรองของฉัน $ ("input: not (.rgFilterBox)"). keydown (ฟังก์ชั่น (e) {ถ้า (e.keyCode == 13) {return false;} กลับจริง;});
hardba11

3
@Daniel ใช่ แต่ถ้าเป็นเช่นนั้นมันเป็นการเปลี่ยนแปลงที่ง่ายสุด ๆ เพื่อรับการเพิ่มประสิทธิภาพการทำงานทันที :)
rinogo

85

คุณสามารถใช้:notตัวเลือกตัวกรอง:

$('foo:not(".someClass")')

หรือnot()วิธีการ:

$('foo').not(".someClass")

ข้อมูลเพิ่มเติม:


3
"ควรถูกมองข้ามถ้าใช้มันเป็นตัวเลือก CSS
BoltClock

17
@BoltClock: มันเป็นสิ่งจำเป็นสำหรับค่าที่มีช่องว่างในพวกเขาฉันได้ทำให้มันเป็นนิสัยของฉันเพื่อระบุผู้เสมอ :)
Sarfraz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.