2010-05-19 27 views
35

Genel:Seçici ile Eşleşen İlk Ata Nasıl Seçilir?

JQuery bir elementin ilk eşleşen atası seçebilir nasıl

?

Örnek:

$('.remove').click(function(){ 
    $(this).parent().parent().hide(); 
    return false; 
}); 

Bu eserler:

bu jQuery kodu kullanarak "Kaldır" ı tıklayarak tablodaki bir satır kaldırabilirsiniz

<table> 
    <tbody> 
     <tr> 
      <td> 
       <a href="#" class="remove">Remove</a> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <a href="#" class="remove">Remove</a> 
      </td> 
     </tr> 
    </tbody> 
</table> 

bu HTML bloğunu alın ama oldukça kırılgan. Eğer birisi <a>'u <div> içine koyarsa, kırılırdı.

:

Teşekkür closest olacağını

cevap

56

"İşte bir unsur var, şimdi bazı seçim kriterlerini eşleşen en yakın atası bulup iade": Bu mantığı şöyle jQuery bir seçici sözdizimi var mı
$(this).closest('tr').hide(); 
+0

. Çok hızlısın. Teşekkürler – Zach

1

Seçiciyi, inandığım ana bağımsız değişkene iletebilirsiniz. Veya başka bir yanıtla belirtildiği gibi en yakınını kullanabilirsiniz.

$('.remove').click(function(){ 
    $(this).closest("tr").hide(); 
    return false; 
}); 
+0

Hayır, "ebeveyn" yalnızca tümüyle ataları değil, doğrudan üst öğeye bakar. – interjay

+0

'parent', DOM ağacının tek bir seviyesini gösterir, bunun yerine 'ebeveynlere' ihtiyacınız olur. Ayrıca, filtre ifadesi 'tr: ilk '(boşluk) olmamalıdır. – karim79

+1

@karim Teşekkürler, cevap verdiğimde henüz kahve yok. Yansıtmak için değiştirildi. – Gabriel

3

Ben @Kobi (+1) işaret ettiği gibi, bunu yapma en özlü şekilde olması gibi görünüyor closest kullanmayı tercih ediyoruz. Sadece işaret etmek, ayrıca parents kullanabilirsiniz:

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

İyi bir alternatif. Ben sadece '' first' bit'i seçtim, çünkü '(en yakın() 'dan) ebeveynler()' in * birden fazla * eleman döndürdüğünü - hemen tüm ebeveynleri yukarıdan yukarıya doğru eşleştiriyor. – Dunc

0

jQuery 1.4 kullanıyorsanız varsayarsak, seçilen atası dahil ancak DEĞİL kadar atalarının tüm dönecektir hangi .parentsUntil() kullanabilirsiniz.

Yani sizin durumda böyle bir şey ile gider: SO beni bıraktığında ben bu yanıt kabul

$('.remove').click(function(){ 
    $(this).parentsUntil("tr").parent().hide(); 
    return false; 
}); 
İlgili konular