jQuery: เลือกองค์ประกอบทั้งหมดของคลาสที่กำหนดยกเว้นรหัสเฉพาะ


146

นี่อาจจะค่อนข้างง่าย

ฉันต้องการที่จะเลือกองค์ประกอบทั้งหมดของชั้นได้รับthisClassยกเว้นที่ id thisIdคือ

เช่นสิ่งที่เทียบเท่ากับ (ที่ไหน - / ลบหมายถึงลบ):

$(".thisClass"-"#thisId").doAction();

คำตอบ:


290

ใช้: ไม่ได้เลือก

$(".thisclass:not(#thisid)").doAction();

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

(".thisclass:not(#thisid,#thatid)").doAction();


3
ถ้าคุณต้องการยกเว้นมากกว่าหนึ่งคลาส ขอบคุณ
SoulMagnet

13
จากเอกสารประกอบ: All selectors are accepted inside :not(), for example: :not(div a) and :not(div,a)ดังนั้นให้ใช้ตัวเลือกที่คั่นด้วยจุลภาคเพื่อทำหลายอย่าง(".thisclass:not(#thisid,#thatid)").doAction();
Chase

ทำงานกับคำพูดเดียวเช่นนี้ - $ (". thisclass: not ('# thisid')"). doAction ();
มูฮัมหมัดราชา

หรือถ้าคุณต้องการผูกองค์ประกอบย่อยทั้งหมดที่มีชื่อคลาสที่เฉพาะเจาะจงยกเว้นหนึ่งคุณสามารถทำเช่นนี้: $ ('. thisclass: ไม่ (#id) .otherclass'). doAction ()
dalmate

จะเป็นอย่างไรถ้าฉันมีรหัสมาตรฐานเช่น: $ ('# some'). notimportant, $ ('# another'). dosomethingelse และฉันต้องการหลีกเลี่ยงการเรียกใช้งาน ID ที่ระบุแบบไดนามิกหรือไม่
Botea Florin

29

หรือใช้เมธอด. not ()

https://api.jquery.com/not/

$(".thisClass").not("#thisId").doAction();

3
.not()ไม่ใช่ตัวเลือก มันเป็นฟังก์ชั่น แต่ก็มี:not()ตัวเลือกเช่นเดียวกับคำตอบอื่น ๆ ที่กล่าวถึง
WoIIe

7

คุณสามารถใช้ฟังก์ชั่น. notเช่นตัวอย่างต่อไปนี้เพื่อลบรายการที่มี id, id ที่มีคำเฉพาะ, id ที่ขึ้นต้นด้วยคำ, ฯลฯ ... ดูhttp://www.w3schools.com/jquery/jquery_ref_selectors . aspสำหรับข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือก jQuery

เพิกเฉยตามรหัสที่แน่นอน:

 $(".thisClass").not('[id="thisId"]').doAction();

ไม่ต้องสนใจ ID ที่มีคำว่า "Id"

$(".thisClass").not('[id*="Id"]').doAction();

ไม่สนใจ ID ที่ขึ้นต้นด้วย "my"

$(".thisClass").not('[id^="my"]').doAction();

6

ฉันจะตอบคำถาม JS (ES6) ในกรณีที่มีคนค้นหา:

Array.from(document.querySelectorAll(".myClass:not(#myId)")).forEach((el,i) => {
    doSomething(el);
}

อัปเดต (อาจเป็นไปได้เมื่อฉันโพสต์คำตอบเดิม แต่เพิ่มตอนนี้ต่อไป):

document.querySelectorAll(".myClass:not(#myId)").forEach((el,i) => {
    doSomething(el);
});

นี่เป็นการกำจัดการArray.fromใช้งาน

document.querySelectorAllNodeListผลตอบแทน
อ่านที่นี่เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับวิธีการทำซ้ำ (และสิ่งอื่น ๆ ): https://developer.mozilla.org/en-US/docs/Web/API/NodeList



2

การใช้.not()วิธีการด้วยการเลือกองค์ประกอบทั้งหมดก็เป็นตัวเลือกเช่นกัน

วิธีนี้อาจมีประโยชน์หากคุณต้องการดำเนินการอื่นกับองค์ประกอบนั้นโดยตรง

$(".thisClass").not($("#thisId")[0].doAnotherAction()).doAction();
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.