ตรวจสอบว่าองค์ประกอบมีระดับ CSS กับ jQuery


173

ฉันทำงานกับ jQuery และดูว่ามีวิธีง่าย ๆ ในการตรวจสอบว่าองค์ประกอบมีคลาส CSS เฉพาะที่เกี่ยวข้องหรือไม่

ฉันมีรหัสขององค์ประกอบและคลาส CSS ที่ฉันกำลังมองหา ฉันแค่ต้องสามารถในคำสั่ง if ทำการเปรียบเทียบตามการมีอยู่ของคลาสนั้นในองค์ประกอบ


1
หากคุณต้องการที่จะทำโดยไม่ใช้ jQuery “ hasClass” ด้วย javascript?
Oriol

คำตอบ:


237

ใช้hasClassวิธีการ:

jQueryCollection.hasClass(className);

หรือ

$(selector).hasClass(className);

อาร์กิวเมนต์คือ (เห็นได้ชัด) สตริงที่แทนคลาสที่คุณกำลังตรวจสอบและมันส่งคืนบูลีน (ดังนั้นจึงไม่สนับสนุนการผูกมัดเหมือนกับวิธี jQuery ส่วนใหญ่)

หมายเหตุ:ถ้าคุณผ่านการclassNameโต้แย้งที่มีช่องว่างมันจะถูกจับคู่กับclassNameสตริงขององค์ประกอบคอลเลกชัน ตัวอย่างเช่นถ้าคุณมีองค์ประกอบ

<span class="foo bar" />

จากนั้นจะส่งคืนtrue:

$('span').hasClass('foo bar')

และสิ่งเหล่านี้จะกลับมาfalse:

$('span').hasClass('bar foo')
$('span').hasClass('foo  bar')

4
ฉันไม่เห็นด้วย. เอกสารของจัดเป็นหมวดหมู่ แต่คุณสามารถดูวิธีการทั้งหมดตามลำดับตัวอักษรเช่นกัน ทุกอย่างมาพร้อมกับตัวอย่างและส่วนความคิดเห็นมักจะล้างสิ่งที่เหลืออยู่ jQuery มีฟังก์ชั่นและยูทิลิตี้ที่ยอดเยี่ยมมากมายและต้องเรียนรู้ที่จะค้นพบมันทั้งหมด -EDIT- นั่นสมเหตุสมผลแล้วมันมาไกลแน่นอน
Trafalmadorian

1
@Trafalmadorian ฉันได้ลบความคิดเห็นดั้งเดิมของฉันเนื่องจากสถานการณ์เปลี่ยนไป แต่เดิมคุณโพสต์ทุกอย่างก่อน -EDIT- และฉันตอบว่าความคิดเห็นของฉันเกี่ยวกับคุณภาพเอกสารนั้นไม่เกี่ยวข้องอีกต่อไป แต่จะอ้างถึงระบบก่อนหน้า (MediaWiki) ของพวกเขา จากนั้นคุณลบความคิดเห็นก่อนหน้าและแทนที่ด้วย -EDIT- ฉันหวังว่าการล้างข้อมูลนี้จะทำให้ผู้อ่านในอนาคตเข้าใจผิดและชัดเจนน้อยลง
เปลือกตา

@daniloquio คือถ้าคุณไปที่ api.jquery.com โดยตรง ... ด้วยเหตุผลบางอย่างเว็บไซต์ยังเชื่อมโยงไปยังเวอร์ชั่นวิกิอันยิ่งใหญ่ที่ docs.jquery.com
eyelidlessness

21

จากคำถามที่พบบ่อย

elem = $("#elemid");
if (elem.is (".class")) {
   // whatever
}

หรือ:

elem = $("#elemid");
if (elem.hasClass ("class")) {
   // whatever
}

3
ระวังด้วย. is () - "The is () วิธีการใน jQuery จะคืนค่าจริงถ้าองค์ประกอบใด ๆ ในคอลเลกชันปัจจุบันตรงกับองค์ประกอบใด ๆ ในคอลเลกชั่น is-based" - bennadel.com/blog/ …
zack

11

สำหรับการปฏิเสธหากคุณต้องการทราบว่าองค์ประกอบไม่มีคลาสคุณสามารถทำตามที่มาร์คได้กล่าวไว้

if (!currentPage.parent().hasClass('home')) { do what you want }

3

ไม่มี jQuery:

var hasclass=!!(' '+elem.className+' ').indexOf(' check_class ')+1;

หรือ:

function hasClass(e,c){
    return e&&(e instanceof HTMLElement)&&!!((' '+e.className+' ').indexOf(' '+c+' ')+1);
}
/*example of usage*/
var has_class_medium=hasClass(document.getElementsByTagName('input')[0],'medium');

นี่คือวิธีเร็วกว่า jQuery!


ทำไมคุณถึงทำ...&&!!((' '+e.classname+' ').indexOf(' '+c+' ')+1)และไม่ใช่แค่&&!(' '+e.classname+' ').indexOf(' '+c+' ')?
Blexy

1
เพราะ indexOfส่งคืน-1คือคลาสที่ไม่มีอยู่ ถ้าผมทำก็จะเป็น!!-1 trueตั้งแต่ฉันทำ!!-1+1มันจะเป็นเท็จ จะมีวิธีที่ดีกว่า...&&!!~(' '+e.className+' ').indexOf(' '+c+' ')นี้ แต่ฉันจำไม่ได้ในเวลานั้น
Ismael Miguel

ขออภัยฉันหมายถึง...&&~(' '+e.className+' ').indexOf(' '+c+' ')
Ismael Miguel

3

เพื่อประโยชน์ในการช่วยเหลือทุกคนที่ลงจอดที่นี่ แต่จริงๆแล้วกำลังมองหาวิธีการทำ jQuery ฟรี:

element.classList.contains('your-class-name')



0

ในกรณีของฉันฉันใช้ 'คือ' ฟังก์ชั่น jQuery ฉันมีองค์ประกอบ HTML ที่เพิ่มคลาส css ที่แตกต่างกันฉันกำลังมองหาคลาสเฉพาะในช่วงกลางเหล่านี้ดังนั้นฉันจึงใช้ "เป็น" ทางเลือกที่ดีในการตรวจสอบ ชั้นเพิ่มแบบไดนามิกในองค์ประกอบ html ซึ่งมีชั้นเรียน CSS อื่น ๆ แล้วมันเป็นอีกทางเลือกที่ดี

ตัวอย่างง่ายๆ:

 <!--element html-->
 <nav class="cbp-spmenu cbp-spmenu-horizontal cbp-spmenu-bottom cbp-spmenu-open" id="menu">somethings here... </nav>

 <!--jQuery "is"-->
 $('#menu').is('.cbp-spmenu-open');

ตัวอย่างขั้นสูง:

 <!--element html-->
    <nav class="cbp-spmenu cbp-spmenu-horizontal cbp-spmenu-bottom cbp-spmenu-open" id="menu">somethings here... </nav>

   <!--jQuery "is"-->
    if($('#menu').is('.cbp-spmenu-bottom.cbp-spmenu-open')){
       $("#menu").show();
    }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.