Je pense que vous devez d'abord définir ce que "le plus proche". Si vous voulez dire le descendant du nœud correspondant à vos critères est la plus courte distance dans les conditions de l'autorité parentale, des liens, puis à l'aide de "premier" ou ".eq(0)" ne fonctionnera pas nécessairement:
<div id='start'>
<div>
<div>
<span class='target'></span>
</div>
</div>
<div>
<span class='target'></span>
</div>
</div>
Dans cet exemple, le deuxième ".cible" <span>
élément est "proche" de la "start" <div>
, parce que c'est seulement une parentale hop loin. Si c'est ce que tu veux dire par "plus proche", vous auriez besoin de trouver la distance minimum dans une fonction de filtre. La liste des résultats à partir d'un sélecteur jQuery est toujours en ordre DOM.
Peut-être:
$.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;
};
C'est en quelque sorte d'un hack plugin raison de la façon dont il construit l'objet de résultat, mais l'idée est que vous avez à trouver le plus court parental chemin d'accès de tous les éléments que vous trouvez. Ce code partis pris à l'égard des éléments vers la gauche dans l'arborescence DOM en raison de l' <
chèque; <=
fausserait rightwards.