"ทั้งหมดยกเว้น" ตัวเลือก jQuery


90

ฉันสามารถเลือก (โดยใช้ jQuery) div ทั้งหมดในมาร์กอัป HTML ได้ดังนี้:

$('div')

แต่ฉันต้องการแยกเฉพาะdiv(พูดว่ามีid="myid") จากการเลือกด้านบน

ฉันจะทำสิ่งนี้โดยใช้ฟังก์ชัน Jquery ได้อย่างไร


2
ใช้ not selector ใน jquery
abhijit

คำตอบ:


171

ง่าย:

$('div').not('#myid');

การใช้จะลบองค์ประกอบจับคู่โดยเลือกที่ได้รับไปจากชุดที่ส่งกลับโดย.not()$('div')

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

$('div:not(#myid)');

ตัวเลือกทั้งสองทำสิ่งเดียวกัน แต่:not()เร็วกว่าน่าจะเป็นเพราะเครื่องมือเลือกของ jQuery Sizzle สามารถปรับให้เหมาะสมกับการ.querySelectorAll()โทรแบบเนทีฟ


1
@Raynos ผมไม่คิดว่ามันจำเป็นที่ไม่ดีแต่ใช้.not()เป็นไกล:not()ดีกว่า
Bojangles

1
ฉันคิดว่ามันควรจะเป็น$('div:not(#myid)');(ไม่มีเครื่องหมายคำพูด) @Raynos: ทำไม? :not()คือตัวเลือก CSS3 jQuery สามารถส่งตัวเลือกไปได้โดยตรงquerySelectorAllหากรองรับ ...
Felix Kling

@FelixKling เป็นส่วนหนึ่งของตัวเลือก 4. อย่างไรก็ตามใน jQuery จะช้ากว่า.notและอ่านได้น้อยลง ฉันควรจะพูดว่า ": not selector in jQuery"
Raynos

@Raynos: :not()ไม่มีสเป็คเตอร์เคยได้รับอนุญาตให้คำพูดภายใน ตัวเลือกนี้ไม่ใช่ตัวเลือกใหม่สำหรับ Selectors 4 และไม่มีการเปลี่ยนแปลงเพื่ออนุญาตเครื่องหมายคำพูด ได้รับการเปลี่ยนแปลงเพื่อให้มีตัวเลือกที่ซับซ้อนมากขึ้น เว้นแต่ฉันจะเข้าใจความคิดเห็นของคุณผิด ...
BoltClock

1
@PeterKrauss ฉันเพิ่งทำมาตรฐาน jsPerfซึ่งทำเครื่องหมายquerySelectorAllว่าเร็วที่สุด ไม่ใช่เกณฑ์มาตรฐานในโลกแห่งความเป็นจริง แต่คาดว่าจะได้รับเนื่องจากไม่มีค่าใช้จ่ายจาก jQuery internal :not()ในความเป็นจริงเร็วกว่านั้นน่าจะเป็นเพราะ Sizzle รู้ว่ามันสามารถเพิ่มประสิทธิภาพให้ใช้งานได้querySelectorAll()
Bojangles

9
var els = toArray(document.getElementsByTagName("div"));
els.splice(els.indexOf(document.getElementById("someId"), 1);

คุณสามารถทำแบบเก่าได้ ไม่ต้องใช้ jQuery อะไรง่ายๆ

เคล็ดลับ Pro:

ชุดขององค์ประกอบ dom เป็นเพียงอาร์เรย์ดังนั้นให้ใช้toArrayวิธีที่คุณชื่นชอบในไฟล์NodeList.

การเพิ่มองค์ประกอบให้กับชุดเป็นเพียง

set.push.apply(set, arrOfElements);

การลบองค์ประกอบออกจากชุดคือ

set.splice(set.indexOf(el), 1)

คุณไม่สามารถลบหลายองค์ประกอบพร้อมกันได้อย่างง่ายดาย :(


1
ในปัจจุบัน (2017) บางทีการใช้ Javascript ดั้งเดิม.querySelector()หรือ.querySelectorAll()ด้วย div:not(#myid) จะเร็วกว่า ...
Peter Krauss

8
$("div:not(#myid)")

[doc]

หรือ

$("div").not("#myid")

[doc]

เป็นวิธีหลักในการเลือกทั้งหมดยกเว้นรหัสเดียว

คุณสามารถดูการสาธิตได้ที่นี่


วันนี้ (2017) อาจ$("div:not(#myid)") เร็วกว่า ... ตรวจสอบการเพิ่มประสิทธิภาพของsizzlejsเมื่อใช้ Javascript ดั้งเดิม.querySelector()หรือ.querySelectorAll().
Peter Krauss




3

คุณใช้.notคุณสมบัติของไลบรารี jQuery:

$('div').not('#myDiv').css('background-color', '#000000');

เห็นในการกระทำที่นี่ div #myDiv จะเป็นสีขาว

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