Bence önce "en yakın" ın ne anlama geldiğini tanımlamalısın. Ebeveyn bağlantıları açısından en kısa mesafe olan ölçütlerinize uyan alt düğümü kastediyorsanız, ": ilk" veya ".eq (0)" kullanmak mutlaka işe yaramayacaktır:
<div id='start'>
<div>
<div>
<span class='target'></span>
</div>
</div>
<div>
<span class='target'></span>
</div>
</div>
Bu örnekte, ikinci ".target" <span>öğesi "başlangıca" "daha yakındır" <div>, çünkü yalnızca bir ebeveyn atlama uzaklığındadır. "En yakın" derken kastettiğin buysa, bir filtre işlevinde minimum mesafeyi bulman gerekir. Bir jQuery seçicinin sonuç listesi her zaman DOM sırasındadır.
Olabilir:
$.fn.closestDescendant = function(sel) {
var rv = $();
this.each(function() {
var base = this, $base = $(base), $found = $base.find(sel);
var dist = null, closest = null;
$found.each(function() {
var $parents = $(this).parents();
for (var i = 0; i < $parents.length; ++i)
if ($parents.get(i) === base) break;
if (dist === null || i < dist) {
dist = i;
closest = this;
}
});
rv.add(closest);
});
return rv;
};
Bu, sonuç nesnesini oluşturma biçiminden dolayı bir tür hack eklentisi, ancak fikir, bulduğunuz tüm eşleşen öğeler arasından en kısa ebeveyn yolunu bulmanız gerektiğidir. Bu kod, <kontrol nedeniyle DOM ağacında sola doğru olan öğelere eğilim gösterir ; <=sağa doğru önyargılı olur.
.find("filter here").eq(0)?