ฉันสามารถเลือก (โดยใช้ jQuery) div ทั้งหมดในมาร์กอัป HTML ได้ดังนี้:
$('div')
แต่ฉันต้องการแยกเฉพาะdiv
(พูดว่ามีid="myid"
) จากการเลือกด้านบน
ฉันจะทำสิ่งนี้โดยใช้ฟังก์ชัน Jquery ได้อย่างไร
ฉันสามารถเลือก (โดยใช้ jQuery) div ทั้งหมดในมาร์กอัป HTML ได้ดังนี้:
$('div')
แต่ฉันต้องการแยกเฉพาะdiv
(พูดว่ามีid="myid"
) จากการเลือกด้านบน
ฉันจะทำสิ่งนี้โดยใช้ฟังก์ชัน Jquery ได้อย่างไร
คำตอบ:
ง่าย:
$('div').not('#myid');
การใช้จะลบองค์ประกอบจับคู่โดยเลือกที่ได้รับไปจากชุดที่ส่งกลับโดย.not()
$('div')
คุณยังสามารถใช้:not()
ตัวเลือก:
$('div:not(#myid)');
ตัวเลือกทั้งสองทำสิ่งเดียวกัน แต่:not()
เร็วกว่าน่าจะเป็นเพราะเครื่องมือเลือกของ jQuery Sizzle สามารถปรับให้เหมาะสมกับการ.querySelectorAll()
โทรแบบเนทีฟ
.not()
เป็นไกล:not()
ดีกว่า
$('div:not(#myid)');
(ไม่มีเครื่องหมายคำพูด) @Raynos: ทำไม? :not()
คือตัวเลือก CSS3 jQuery สามารถส่งตัวเลือกไปได้โดยตรงquerySelectorAll
หากรองรับ ...
:not()
ไม่มีสเป็คเตอร์เคยได้รับอนุญาตให้คำพูดภายใน ตัวเลือกนี้ไม่ใช่ตัวเลือกใหม่สำหรับ Selectors 4 และไม่มีการเปลี่ยนแปลงเพื่ออนุญาตเครื่องหมายคำพูด ได้รับการเปลี่ยนแปลงเพื่อให้มีตัวเลือกที่ซับซ้อนมากขึ้น เว้นแต่ฉันจะเข้าใจความคิดเห็นของคุณผิด ...
querySelectorAll
ว่าเร็วที่สุด ไม่ใช่เกณฑ์มาตรฐานในโลกแห่งความเป็นจริง แต่คาดว่าจะได้รับเนื่องจากไม่มีค่าใช้จ่ายจาก jQuery internal :not()
ในความเป็นจริงเร็วกว่านั้นน่าจะเป็นเพราะ Sizzle รู้ว่ามันสามารถเพิ่มประสิทธิภาพให้ใช้งานได้querySelectorAll()
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)
คุณไม่สามารถลบหลายองค์ประกอบพร้อมกันได้อย่างง่ายดาย :(
.querySelector()
หรือ.querySelectorAll()
ด้วย div:not(#myid)
จะเร็วกว่า ...
$("div:not(#myid)")
หรือ
$("div").not("#myid")
เป็นวิธีหลักในการเลือกทั้งหมดยกเว้นรหัสเดียว
คุณสามารถดูการสาธิตได้ที่นี่
$("div:not(#myid)")
เร็วกว่า ... ตรวจสอบการเพิ่มประสิทธิภาพของsizzlejsเมื่อใช้ Javascript ดั้งเดิม.querySelector()
หรือ.querySelectorAll()
.
var elements = $('div').not('#myid');
ซึ่งจะรวม div ทั้งหมดยกเว้นอันที่มี id 'myid'
$('div:not(#myid)');
นี่คือสิ่งที่คุณต้องการฉันคิด
ที่ควรทำ:
$('div:not("#myid")')