jQuery ebeveyni


93

Şu anda bir elemanın ebeveyninin üstünü bulmaya çalışıyorum. A içinde tıklanan bir bağlantı var <td>ve <tr>nesneyi almak istiyorum .

Neden "$ (this) .parent (). Parent ()" çalışmıyor? Ne olacak?

Teşekkürler,
Brendan

Düzenleme: Sözdizimimdeki bir hata her şeyi atıyor gibi görünüyor. "$ (this) .parent (). parent ()" aslında işe yarıyor, ancak ben $ (this) .closest ('tr') "ile devam ettim çünkü en etkili çözüm gibi görünüyor.


1
Ana seçicinizin neden çalışmadığını görebilmemiz için kodu gönderebilir misiniz?
TStamper

Yanıtlar:


222

En iyi yol muhtemelen kullanmaktır closest:

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

Belgelere göz atın :

En yakın, önce belirtilen ifadeyle eşleşip eşleşmediğini görmek için geçerli öğeye bakarak çalışır, öyleyse yalnızca öğenin kendisini döndürür. Eşleşmezse, belirtilen ifadeyle eşleşen bir öğe bulunana kadar, ana öğeye göre belgede yukarı doğru ilerlemeye devam eder. Eşleşen bir öğe bulunmazsa, hiçbiri döndürülmez.


20

İşe yaramalı. Ayrıca $ (this) .parents (etiket) deneyebilirsiniz, burada etiket bulmak istediğiniz etikettir.

Örneğin:

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

"Zincire kadar" en yakın tr'yi bulacaktır.


9

Bu işe yaramalı ... deneyebilirsin

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

.Parents (seçici), seçiciyle eşleşen tüm ataları al diyor

ve: eq (1) listedeki birinci (sıfır indisli, yani ikinci) öğeyi bul diyor


Bunun bir html bağlantı etiketi olduğundan emin olmak için bunu uyarmayı deneyebilirsiniz. Şunları yapmayı deneyin: alert ('anchor html (' + $ (this) .html () + ')');
Lathan

6

Bu pasaj geçmişte benim için gerçekleştirildi:

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

Bir yerde başka bir sorun olup olmadığını görmemiz için bir kod gönderin ...


Buna katılıyorum. Ben kullanabilir $(this).parent().parent()sorun olmadan
DrewT

5

Ayrıca denemek

$(this).closest('div.classname').hide();

2

Ebeveyn için herhangi bir kimliğiniz / sınıfınız varsa, ebeveynleri () kullanabilirsiniz, ancak bu, filtrelemediğiniz () veya başka bir şekilde durdurmadığınız sürece size tüm ebeveynleri <body> verecektir.

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

Umarım bu birine yardımcı olur :)


1

$ (This) .parent () öğesini $ ($ (this) .parent ()) gibi bir jQuery nesnesine sarmayı deneyin Geçerli bir jquery nesnem olduğundan emin olmak için genellikle bunu yapma ihtiyacını buluyorum. Oradan ebeveyn ebeveyni bulabilir veya belki prev () 'i kullanabilirsiniz.


8
Bu tamamen anlamsız. Tek yaptığınız başka bir jQuery nesnesi oluşturarak zaman kaybetmek ...
James

1
var getParentNode = function(elem, level) { 
    level = level || 1; 
    for (var i = 0; i < level; i++) {
        if (elem != null) {
            elem = elem.parentNode; 
        }
    }
    return elem; 
}

0

.closest() özellikle aynı eleman yapısına sahip olduğunuzda her zaman en iyi seçenek değildir.

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

Bir ebeveynin ebeveynini yapabilirsiniz ve bu çok kolaydır:

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

vb.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.