35 votes

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 l' <a> en <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"

Merci

56voto

Kobi Points 65357

Ce serait closest :

 $(this).closest('tr').hide();
 

3voto

karim79 Points 178055

Je préfère utiliser closest comme le souligne @Kobi (+1) car cela semble être le moyen le plus concis de le faire. Juste pour souligner, vous pouvez également utiliser parents :

 $(this).parents("tr:first")
 

1voto

Gabriel Points 5234

Vous pouvez passer un sélecteur à l'argument parent, je crois.

 $('.remove').click(function(){
  $(this).parents("tr:first").hide();
  return false;
});
 

Ou vous pouvez utiliser le plus proche comme indiqué par une autre réponse.

 $('.remove').click(function(){
  $(this).closest("tr").hide();
  return false;
});
 

0voto

Dave Points 1001

En supposant que vous utilisez jQuery 1.4, vous pouvez utiliser .parentsUntil () qui retournera tous les ancêtres jusqu'à , mais non l'ancêtre sélectionné.

Donc, dans votre cas, j'irais avec quelque chose comme ceci:

 $('.remove').click(function(){
    $(this).parentsUntil("tr").parent().hide();
    return false;
});
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X