jQuery ผู้ปกครองของผู้ปกครอง


95

ฉันกำลังพยายามค้นหาพาเรนต์ของผู้ปกครองขององค์ประกอบ ฉันมีลิงค์ที่คลิกที่อยู่ใน a <td>และฉันต้องการรับ<tr>วัตถุ

ทำไม "$ (this) .parent (). parent ()" จึงไม่ทำงาน อะไรจะ?

ขอบคุณ
เบรนแดน

แก้ไข:ดูเหมือนว่าข้อผิดพลาดในไวยากรณ์ของฉันทำให้ทุกอย่างหลุดออกไป "$ (this) .parent (). parent ()" ใช้งานได้จริง แต่ฉันใช้ $ (this) .closest ('tr') "เพราะดูเหมือนว่าจะเป็นโซลูชันที่มีประสิทธิภาพมากที่สุด


1
คุณช่วยโพสต์รหัสเพื่อให้เราดูว่าเหตุใดตัวเลือกหลักของคุณจึงไม่ทำงาน
TStamper

คำตอบ:


224

วิธีที่ดีที่สุดอาจใช้closest:

$(this).closest('tr');

ตรวจสอบเอกสารประกอบ :

ทำงานได้ใกล้เคียงที่สุดโดยดูที่องค์ประกอบปัจจุบันก่อนเพื่อดูว่าตรงกับนิพจน์ที่ระบุหรือไม่หากเป็นเช่นนั้นเพียงส่งคืนองค์ประกอบ หากไม่ตรงกันก็จะยังคงสำรวจเอกสารพาเรนต์ตามพาเรนต์จนกว่าจะพบองค์ประกอบที่ตรงกับนิพจน์ที่ระบุ หากไม่พบองค์ประกอบที่ตรงกันจะไม่มีการส่งคืน


20

มันควรจะทำงาน คุณยังสามารถลองใช้ $ (this) .parents (tag) โดยที่ tag คือแท็กที่คุณต้องการค้นหา

ตัวอย่างเช่น:

$(this).parents("tr:first")

จะพบ tr "up the chain" ที่ใกล้ที่สุด.


9

น่าจะได้ผล ... คุณอาจลองทำ

$(this).parents(':eq(1)');

.parents (ตัวเลือก) บอกว่ารับบรรพบุรุษทั้งหมดที่ตรงกับตัวเลือก

และ: eq (1) บอกว่า find the oneth (zero-indexed, so the second) element ในรายการ


คุณอาจลองแจ้งเตือนสิ่งนี้เพื่อให้แน่ใจว่าเป็นแท็กจุดยึด html ลองทำ: alert ('anchor html (' + $ (this) .html () + ')');
Lathan

6

ตัวอย่างข้อมูลนี้ได้ดำเนินการให้ฉันในอดีต:

$(this).parent().parent(); 

โพสต์โค้ดให้เราดูว่าอาจจะมีปัญหาอะไรอีก ...


ฉันเห็นด้วยกับเรื่องนี้ ฉันสามารถใช้ได้$(this).parent().parent()โดยไม่มีปัญหา
DrewT


2

หากคุณมี id / class ประเภทใดก็ได้สำหรับพาเรนต์คุณสามารถใช้ parent () ได้ แต่จะทำให้ผู้ปกครองทุกคนมีส่วนร่วมใน <body> เว้นแต่คุณจะกรอง () หรือหยุดด้วยวิธีอื่นเช่น

$(this).parents('.myClass');

หวังว่านี่จะช่วยใครสักคน :)


1

ลองห่อ $ (this) .parent () ลงในวัตถุ jQuery เช่น $ ($ (this) .parent ()) ฉันมักจะพบว่าจำเป็นต้องทำสิ่งนี้เพื่อให้แน่ใจว่าฉันมีวัตถุ jquery ที่ถูกต้อง จากตรงนั้นคุณควรจะได้รับความช่วยเหลือจากผู้ปกครองหรืออาจใช้ prev ()


8
นี่เป็นสิ่งที่ไม่มีจุดหมายโดยสิ้นเชิง สิ่งที่คุณทำคือเสียเวลาโดยการสร้างวัตถุ jQuery ขึ้นมาใหม่ ...
เจมส์


0

.closest() ไม่ใช่ตัวเลือกที่ดีที่สุดเสมอไปโดยเฉพาะเมื่อคุณมีโครงสร้างองค์ประกอบเดียวกัน

<div>
    <div>
        <div>
        </div>
    </div>
</div>

คุณสามารถเป็นผู้ปกครองของผู้ปกครองได้และทำได้ง่ายมาก:

var parent = $('.myDiv').parent();
var parentParent = $(parent).parent();
var parentParentParent = $(parentParent).parent();

เป็นต้น

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