2010-03-24 15 views
32

Bir seçici tarafından filtrelenen geçerli eşleşen kümenin soyundan/atalarını almak için matchedset.find(selector)/matchedset.parents(selector)'u kullanabilirsiniz; ancak bu, eşleşen kümenin kendisini içermez. seçiciyle de eşleştirin).JQuery: ataları (veya soyundan gelenleri) ve kendi kendine

matchedset.find(selector).add(matchedset.filter(selector)) 

daha almak için daha iyi bir (daha özlü ve/veya daha hızlı) yolu ve) (ebeveynler için ilgili var mıdır?

cevap

42

Bunu yapabilirsin: ebeveynler için

matchedset.find('*').andSelf().filter(selector); 

:

matchedset.parents('*').andSelf().filter(selector); 
+0

almaz mı? .find ('*') 'veya' .contents() 'gibi: http://stackoverflow.com/questions/364791/jquery-select-descendants-including-the-parent – Joe

+10

Muhtemelen not etmek iyi bir fikir ve şimdi artık kullanımdan kaldırılmış ve bir seçiciyi de kabul eden addBack() ile değiştirilmiştir. http://api.jquery.com/addBack/ –

0

"andSelf()" işlevine bakın.

+2

andSelf() daha iyi olan bir seçici – gsakkis

17

Ben senin yöntem yürütme zaman açısından verimli olduğunu düşünüyorum, ama ne muhtemelen sorduğun sözdizimsel şekerdir. Sonra

jQuery.fn.findAndSelf = function(selector) { 
    return this.find(selector).add(this.filter(selector)) 
    } 

bu gibi kullanmak: Bunun için, bir eklenti haline sarabilirdiniz size 'Bul' için de çalışan bir eklenti oluşturabilir fantezi olsun isterse

$('.whatever').findAndSelf('.awesome') 

ancak 'ebeveynler' ve için 'çocuk' ve diğer seçici tabanlı eklentiler:

jQuery.fn.withSelf = function(plugin, selector) { 
    return this[plugin](selector).add(this.filter(selector)) 
    } 

Sonra size eklentisi ilk argüman olarak geçişi temin ederim

aramak istediğiniz:

Sadece eğlence için
$('.whatever').withSelf('find', '.awesome') 
$('.whatever').withSelf('parents', '.awesome') 

, sen tek seferde kastetmek eklentileri keyfi bir numarayı aramak sağlayan başka eğlenceli eklenti: Sen seçici tabanlı eklentileri herhangi bir kombinasyonu ile bunu uygulayarak herhangi

jQuery.fn.traverse = function(plugins, selector) { 
    var set = new jQuery(); 
    $.each(plugins, function(i, val) { 
     set.add(this[val](selector)); 
    } 
    return set 
    } 

, şöyle :

$('.whatever').traverse(['find','filter'], '.awesome') 
$('.whatever').traverse(['parents','find'], '.awesome') 
$('.whatever').traverse(['parents', 'filter'], '.awesome') 
2

Jeoff çözümü sevimli olmasına rağmen bazen bir seçicinin olmadan kendisi dahil, tüm unsurları yineleme edebilmek güzel. Bu eklenti biraz daha esnektir: ebeveynler için

$.fn.all = function(selector) { 
    if(selector===window.undefined) return this.find('*').andSelf(); 
    return this.filter(selector).add(this.find(selector)); 
}; 
0

Eğer closest(selector)

İlgili konular