jQuery-obtenir la valeur texte d'une cellule de table dans la même rangée qu'un élément cliqué

je clique sur un lien dans une cellule de tableau. J'ai besoin d'obtenir la valeur d'une cellule spécifique dans cette même rangée 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 joint le lien dans la quatrième cellule. Ce gestionnaire de clic appelle une fonction qui ouvre une fenêtre modale. Quand un formulaire dans le modal est soumis, je veux aussi passer la valeur de la classe td="deux" de la ligne dans laquelle le lien a été cliqué à ce modal.

Voici la fonction qui envoie le modal (la zone de problème est obtenir la valeur correcte pour quelque Chose var):

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 bonne valeur pour quelque chose. Il doit être la valeur de td class=deux dans la même ligne que l'élément cliqué.

La façon dont ce tout vient ensemble. Cliquez sur le lien cible, qui appelle une méthode appelée Send_Click(). Send_Click effectue quelques validations puis appelle Send () mais la valeur de quelque chose n'est jamais remplie. Est-ce parce que this n'est pas ce que je suis en train de penser? Hjelp!

45
demandé sur Stuart 2010-02-23 04:40:15

5 réponses

.children() (documentation ici):

$(this).closest('tr').children('td.two').text();
71
répondu Nick Craver 2010-02-23 01:42:57

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 indice basé sur zéro (lien).

62
répondu Mottie 2010-02-23 02:52:16

devrait fonctionner:

var Something = $(this).children("td:nth-child(n)").text();
5
répondu hhhqsun 2012-05-26 00:11:57

ainsi vous pouvez utiliser parent() pour atteindre le tr parent et ensuite utiliser find pour rassembler le td avec la classe 2

var Something = $(this).parent().find(".two").html();

ou

var Something = $(this).parent().parent().find(".two").html();

utiliser autant que parent() de ce que jamais la profondeur de l'objet cliqué selon la ligne tr

j'espère que cela fonctionne...

4
répondu Yasin Ergul 2010-02-23 02:47:03

Ce sera également le travail

$(this).parent().parent().find('td').text()
4
répondu Anna.P 2012-11-13 07:27:07