Comment Sélectionner Le Premier Ancêtre Qui Correspond À Un Sélecteur?
Général:
Comment puis-je sélectionner le premier correspondant à l'ancêtre d'un élément en jQuery?
Exemple:
Prendre ce bloc HTML
<table>
<tbody>
<tr>
<td>
<a href="#" class="remove">Remove</a>
</td>
</tr>
<tr>
<td>
<a href="#" class="remove">Remove</a>
</td>
</tr>
</tbody>
</table>
Je peux supprimer une ligne dans la table en cliquant sur "Supprimer" à l'aide de ce code jQuery:
$('.remove').click(function(){
$(this).parent().parent().hide();
return false;
});
Cela fonctionne, mais il est assez fragile. Si quelqu'un met la <a>
dans un <div>
, par exemple, elle allait se briser. Est-il un sélecteur de syntaxe jQuery qui suit cette logique:
"Voici un élément, maintenant, trouver le plus proche de l'ancêtre qui correspond à certains critères de sélection et retourner"
Grâce
Vous devez vous connecter pour publier un commentaire.
Qui serait
proche
:Je préfère utiliser
closest
comme @Kobi points (+1), car il semble être le plus concis façon de le faire. Juste pour signaler, vous pouvez également utiliserparents
::first
peu dans le sélecteur, depuisparents()
(contrairement àclosest()
) retourne plusieurs éléments - tous les éléments correspondants de la mère vers le haut.Vous pouvez passer d'un sélecteur à l'argument parent je crois.
Ou vous pouvez utiliser les plus proches, comme indiqué par une autre réponse.
parent
ne regarde que le parent immédiat et pas tous les ancêtres.parent
traverse jusqu'à un seul niveau de l'arborescence DOM, vous devezparents
à la place. Aussi, l'expression de filtre doit êtretr:first
(pas d'espace).En supposant que vous êtes à l'aide de jQuery 1.4, vous pouvez utiliser .parentsUntil() qui sera de retour tous les ancêtres jusqu'à mais PAS y compris sélectionnés ancêtre.
Donc dans votre cas, je aller avec quelque chose comme ceci: