jquery ตัวเลือกสำหรับคลาสภายใน id


91

ด้านล่างนี้ฉันจะเลือกองค์ประกอบที่มีคลาสmy_classภายในองค์ประกอบด้วยได้id = "my_id"อย่างไร

โปรดทราบว่าองค์ประกอบอาจมีคลาสอื่นซึ่งฉันไม่ได้เลือก

<div id = "my_id">
    <span class = "my_class hidden">hi</span>
    <span class = "my_class">hello</span>
</div>

พยายาม

$("#my_id [class*=my_class ]")

คำตอบ:


151

คุณสามารถใช้ตัวเลือกชั้นเรียนร่วมกับตัวเลือกลูกหลาน

$("#my_id .my_class")

ฉันสามารถรวมสิ่งนี้กับ: first (เพื่อรับองค์ประกอบแรกของคลาสนั้นใน #my_id)
jakob.j

1
@ jakob.j$("#my_id .my_class:first")
Arun P Johny

ฉันสามารถใช้คลาสเดียวกันกับ id เช่น $ (". my_class #my_id") เมื่อ id ถูกกำหนดภายในคลาส
dhS

48

เพียงใช้ตัวเลือกคลาส ol 'ธรรมดา

$('#my_id .my_class')

ไม่สำคัญว่าองค์ประกอบนั้นจะมีคลาสอื่นด้วยหรือไม่ มีคลาส. my_classและอยู่ใน#my_idดังนั้นจึงตรงกับตัวเลือกนั้น

เกี่ยวกับประสิทธิภาพ

ตามเอกสารเกี่ยวกับประสิทธิภาพของตัวเลือก jQueryการใช้ตัวเลือกสองตัวแยกกันเร็วกว่าเช่นนี้:

$('#my_id').find('.my_class')

นี่คือส่วนที่เกี่ยวข้องของเอกสาร:

ID-Based Selectors

// Fast:
$( "#container div.robotarm" );

// Super-fast:
$( "#container" ).find( "div.robotarm" );

.find()วิธีการได้เร็วขึ้นเพราะตัวเลือกแรกที่จะถูกจัดการโดยไม่ต้องผ่านเครื่องมือเลือก Sizzle - เลือก ID-เพียงได้รับการจัดการโดยใช้document.getElementById()ซึ่งเป็นไปอย่างรวดเร็วมากเพราะมันเป็นสันดานไปเบราว์เซอร์

การเลือกตาม IDหรือตามคลาสเพียงอย่างเดียว (เหนือสิ่งอื่นใด) เรียกใช้ฟังก์ชันที่เบราว์เซอร์จัดหามาdocument.getElementById()ซึ่งค่อนข้างรวดเร็วในขณะที่การใช้ตัวเลือกที่สืบทอดจะเรียกใช้เอ็นจิ้น Sizzle ดังที่กล่าวไว้ซึ่งแม้ว่าจะเร็ว แต่จะช้ากว่าทางเลือกที่แนะนำ


12

ใช้เสมอ

//Super Fast
$('#my_id').find('.my_class'); 

แทน

// Fast:
$('#my_id .my_class');

มีลักษณะที่JQuery กฎการปฏิบัติงาน

นอกจากนี้ที่Jquery Doc


1

ฉันคิดว่าการขอให้คุณเลือกเฉพาะ<span class = "my_class">hello</span>องค์ประกอบนี้คุณได้ทำเช่นนี้แล้วถ้าฉันเข้าใจคำถามของคุณถูกต้องนี่คือคำตอบ

$("#my_id [class='my_class']").addClass('test');

DEMO


$("#my_id .my_class")เทียบเท่าที่สั้นกว่า คุณไม่ได้รับอะไรเลยจากการใช้ตัวเลือกแอตทริบิวต์ในกรณีนี้
doppelgreener

ฉันหวังว่าจะได้ผลเช่นเดียวกับคำตอบของคุณในขณะที่ฉันกำลังตอบคำถามที่คุณตอบฉันไม่ได้สังเกตว่าตั้งแต่ฉันตอบคำถามฉันก็ยังไม่ได้ลบคำถาม
Thirumalai murugan

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