Je clique sur un lien dans une cellule de tableau. Je dois obtenir la valeur d'une cellule spécifique dans cette même ligne de tableau.
<tr>
<td class="one">this</td>
<td class="two">that</td>
<td class="three">here</td>
<td class="four"><a href="#">there</a></td>
</tr>
<tr>
<td class="one">qwqw</td>
<td class="two">dfgh</td>
<td class="three">ui</td>
<td class="four"><a href="#">there</a></td>
</tr>
J'ai un gestionnaire de clic attaché au lien dans la quatrième cellule. Ce gestionnaire de clic appelle une fonction qui ouvre une fenêtre modale. Lorsqu'un formulaire du modal est soumis, je souhaite également transmettre la valeur de td class = "two" de la ligne dans laquelle le lien a été cliqué vers ce modal.
Voici la fonction qui envoie le modal (le problème est d'obtenir la valeur correcte pour var Something):
var Send = function() {
var Name = $( '#name' ).val();
var Something = $(this).closest('td').siblings('.two').text(); // version 1. doesn't work
var Something = $(this).closest('tr').siblings('td.two').text(); // version 2 also doesn't work
var Something = $(this).attr('class'); // version 3. just a test but also doesn't work
$.ajax( {
async: false,
data: { name: Name, somedata: Something },
type: 'POST',
url: the url
});
};
Le problème est que je ne peux pas obtenir la valeur correcte pour Something. Ce devrait être la valeur de td class = two dans la même ligne que l'élément cliqué.
La façon dont tout cela se réunit est. Cliquez sur le lien cible, qui appelle une méthode appelée Send_Click (). Send_Click effectue des validations puis appelle Send () mais la valeur de Quelque chose n'est jamais renseignée. Est-ce parce que this
n'est pas ce que je pense? Hjelp!
Vous voulez plutôt .children()
( documentation ici ):
$(this).closest('tr').children('td.two').text();
Nick a la bonne réponse, mais je voulais ajouter que vous pourriez aussi obtenir les données de la cellule sans avoir besoin du nom de la classe.
var Something = $(this).closest('tr').find('td:eq(1)').text();
:eq(#)
a un index de base zéro ( lien ).
ça devrait marcher:
var Something = $(this).children("td:nth-child(n)").text();
vous pouvez donc utiliser parent () pour atteindre le parent parent, puis utiliser find pour rassembler le td avec la classe deux
var Quelque chose = $ (this) .parent (). find (". two"). html ();
ou
var Quelque chose = $ (this) .parent (). parent (). find (". two"). html ();
utilise autant que parent () quelle que soit la profondeur de l'objet cliqué en fonction de la ligne tr
espérons que cela fonctionne ...
Cela fonctionnera aussi
$(this).parent().parent().find('td').text()