jQuery: จะไปหาลูกคนใดคนหนึ่งของผู้ปกครองได้อย่างไร?


92

เพื่อให้เป็นตัวอย่างที่เรียบง่ายฉันได้บล็อกต่อไปนี้ซ้ำแล้วซ้ำอีกในหน้าหลาย ๆ ครั้ง (สร้างแบบไดนามิก):

<div class="box">
   <div class="something1"></div>
   <div class="something2">
      <a class="mylink">My link</a>
   </div>
</div>

เมื่อคลิกฉันจะไปที่แม่ของลิงก์โดยใช้:

$(".mylink").click(function() {
   $(this).parents(".box").fadeOut("fast");
});

อย่างไรก็ตาม ... ฉันต้องไปหา<div class="something1">พ่อแม่คนนั้น

โดยทั่วไปมีใครบอกฉันได้ไหมว่าจะอ้างถึงพี่น้องระดับสูงกว่าโดยไม่สามารถอ้างถึงโดยตรงได้อย่างไร? ขอเรียกว่าพี่ใหญ่ การอ้างอิงโดยตรงไปยังชื่อชั้นของพี่ใหญ่จะทำให้ทุกอินสแตนซ์ขององค์ประกอบนั้นในหน้านั้นเลือนหายไปซึ่งไม่ใช่เอฟเฟกต์ที่ต้องการ

ฉันพยายามแล้ว:

parents(".box .something1") ... no luck.
parents(".box > .something1") ... no luck.
siblings() ... no luck.

ทุกคน? ขอบคุณ.


คำตอบของ Anurag อาจดูเหมือนไม่ถูกต้อง - ทำให้ฉันหยุดและคิดอย่างแน่นอน แต่มันชี้ให้เห็นถึงการพิมพ์ผิดอย่างชัดเจนในรหัสของคุณซึ่งทำให้ตัวเลือกของคุณล้มเหลว ตัวเลือกใน jQuery .parent() ไม่ใช่ .parents()
David กล่าวว่าคืนสถานะ Monica

@ricebowl: ผิด. api.jquery.com/parents
SLaks

@ricebowl ... parent () จะให้ div something2 กับฉันดังนั้นฉันต้องการให้ผู้ปกครอง () ไปที่กล่อง div
ทอม

อา; ขอโทษด้วย. อืม ... ฉันไม่รู้ว่าจะดีที่สุดที่จะปล่อยให้ความไม่รู้ของฉันปรากฏขึ้นหรือลบข้อผิดพลาดเพื่อหลีกเลี่ยงการทำให้คนอื่นไม่พอใจ ... = | อย่างน้อยฉันก็ได้เรียนรู้สิ่งที่เป็นประโยชน์ในวันนี้ นั่นคือประเด็นใช่ไหม .. ? =)
เดวิดบอกว่าคืนสถานะโมนิกา

1
@ricebowl ไม่ต้องกังวลขอบคุณที่ร่วมให้ข้อมูล
ทอม

คำตอบ:


146

โทรจะกลับองค์ประกอบผู้ปกครองทั้งหมดที่ตรงกับตัวเลือก.parents(".box .something1") .box .somethingในคำอื่น ๆ ก็จะกลับองค์ประกอบของผู้ปกครองที่มีและภายใน.something1.box

คุณต้องรับลูกของผู้ปกครองที่ใกล้เคียงที่สุดดังนี้:

$(this).closest('.box').children('.something1')

รหัสนี้เรียก.closestเพื่อให้พาเรนต์ด้านในสุดตรงกับตัวเลือกจากนั้นเรียก.childrenใช้องค์ประกอบหลักนั้นเพื่อค้นหาลุงที่คุณกำลังมองหา


ฉันรู้ว่านี้เป็นบิตเก่า แต่ไม่ได้ดีขึ้นในกรณีนี้จะใช้ผู้ปกครอง ()มากกว่าที่ใกล้เคียงที่สุด ()เป็นผมคิดว่ามีมากขึ้นในการข้ามผ่านต้นไม้ที่มีอยู่ใกล้ () ?
rmorse

1
@acSlater: เขาต้องการเส้นทางข้ามต้นไม้ parent()เป็นองค์ประกอบที่ไม่ถูกต้อง
SLaks

อ่าใช่พ่อแม่ (). parent () ที่ทอมต้องการขอโทษ! :)
rmorse

1
@acSlater: ใช่; ที่จะได้ผล อย่างไรก็ตามมันทำให้ Javascript อยู่คู่กับโครงสร้าง HTML มากขึ้น .closest(...)มีความยืดหยุ่นมากขึ้นและอ่านได้ง่ายขึ้นด้วย
SLaks

8
ในกรณีที่ใครสงสัย: หลังจากคุณพบผู้ปกครองที่เหมาะสมโดยใช้. closest () หากคุณกำลังมองหาองค์ประกอบลูกที่ไม่ใช่ลูกโดยตรง (แต่เป็นลูกของลูก) ให้ใช้ ค้นหา () แทน. children
Fabien Snauwaert

17
$(this).parent()

การลัดเลาะต้นไม้เป็นเรื่องสนุก

$(this).parent().siblings(".something1");

$(this).parent().prev(); // if you always want the parent's previous sibling

$(this).parents(".box").children(".something1");

และวิธีอื่น ๆ อีกมากมายคุณอาจพบว่าเอกสารเหล่านี้มีประโยชน์


ขอบคุณ แต่ไม่ได้มองหาพ่อแม่ แต่เป็นลูกของพ่อแม่อีกคน (หรือปู่ย่าตายายจริงๆ)
ทอม

ฮิฮิ ... มันเป็นเรื่องครอบครัวจริงๆ
ทอม

13

สิ่งนี้จะค้นหาผู้ปกครองคนแรกที่มีคลาสboxจากนั้นค้นหาคลาสย่อยแรกที่มีการจับคู่ regex somethingและรับ id

$(".mylink").closest(".box").find('[class*="something"]').first().attr("id")


5

คุณสามารถใช้.each()กับ.children()และตัวเลือกภายในวงเล็บ:

//Grab Each Instance of Box.
$(".box").each(function(i){

    //For Each Instance, grab a child called .something1. Fade It Out.
    $(this).children(".something1").fadeOut();
});
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.