먼저 "가장 가까운"이 무엇을 의미하는지 정의해야한다고 생각합니다. 부모 링크 측면에서 가장 짧은 거리 인 기준과 일치하는 하위 노드를 의미하는 경우 ": first"또는 ".eq (0)"을 사용하는 것이 반드시 작동하는 것은 아닙니다.
<div id='start'>
<div>
<div>
<span class='target'></span>
</div>
</div>
<div>
<span class='target'></span>
</div>
</div>
이 예에서 두 번째 ".target" <span>요소는 "start"에 "closer"입니다.<div> . 부모 홉이 하나뿐이기 때문입니다. 이것이 "가장 가깝다"는 뜻이라면 필터 함수에서 최소 거리를 찾아야합니다. jQuery 선택기의 결과 목록은 항상 DOM 순서입니다.
아마도:
$.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;
};
그것은 결과 객체를 만드는 방식 때문에 일종의 해킹 플러그인이지만, 당신이 찾은 모든 일치하는 요소에서 가장 짧은 부모 경로를 찾아야한다는 생각입니다. 이 코드는 <검사로 인해 DOM 트리의 왼쪽 요소로 편향됩니다 . <=오른쪽으로 편향됩니다.
.find("filter here").eq(0)?