Vous voulez sélectionner l'élément le plus proche tr
, pas le parent immédiat. Sans voir votre liaison d'événement, je suppose que $(this)
est le bouton, et que $(this).parent()
est le <td>
. Au lieu de cela, vous devriez essayer:
$(this).closest('tr').remove();
Ou, si vous pouvez garantir une hiérarchie spécifique de tr>td>button
, vous pouvez alors utiliser:
$(this).parent().parent().remove();
Je déconseillons fortement en utilisant ce dernier format, car il est bien couplé à la structure du HTML. Si votre code HTML commence comme:
<tr>
<td>
<button>Example</button>
</td>
</tr>
et modifications ultérieures:
<tr>
<td>
<div class="wrapper">
<button>Example</button>
</div>
</td>
</tr>
en utilisant closest('tr')
continuera à travailler, mais en utilisant parent().parent()
cassera.
Relatif à votre problème secondaire de ne pas avoir déclenché d'événements. Si vous liez des événements avec $('.foo button').click(removeRow);
(où .foo
correspond à l'élément table
), les événements ne s'appliqueront pas aux éléments button
nouvellement créés. Au lieu de cela, vous devriez utiliser la forme de on
-délégation de l'événement (ou simplement delegate
si vous utilisez une ancienne version de jQuery):
$('.foo').on('click', 'button', removeRow);
Ce stockerait l'événement de liaison sur l'élément table
, et quand le rappel est appelée, elle vérifie si l'élément qui a déclenché l'événement spécifié correspond au sélecteur spécifié dans le second argument (dans ce cas, 'button'
) s'il correspond, il déclenche le gestionnaire spécifié (dans ce cas, removeRow
) avec l'élément correspondant en tant que contexte (dans le gestionnaire, this
pointe toujours vers un élément button
).
Montrez-nous plus de code. Mais je soupçonne que vous avez ajouté cela sur l'événement de clic du bouton. Si oui, le parent du bouton est le TD, qui est supprimé, non? – mrunion
correct, j'ai trouvé le problème juste moi ne réalisant pas je l'ai placé dans un td aussi ...erreur stupide – Jupiter