jQuery-uzyskanie wartości tekstowej komórki tabeli w tym samym wierszu co kliknięty element

Klikam link w komórce tabeli. Muszę uzyskać wartość określonej komórki w tym samym wierszu tabeli.

<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>

Do linku w czwartej komórce jest dołączony moduł obsługi kliknięć. To kliknięcie wywołuje funkcję otwierającą okno modalne. Gdy formularz w modalu zostanie przesłany chcę również przekazać wartość td class = " two " z wiersza, w którym link został kliknięty do tego modalu.

Tutaj jest funkcja, która wysyła modal (obszar problemowy jest uzyskanie poprawnego wartość dla 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
    });        
};

Problem polega na tym, że nie mogę uzyskać prawidłowej wartości dla czegoś. Powinna to być wartość td class = two w tym samym wierszu co kliknięty element.

To wszystko łączy się w całość. Kliknij łącze docelowe, które wywołuje metodę o nazwie Send_Click (). Send_Click wykonuje pewne walidacje, a następnie wywołuje Send (), ale wartość czegoś nigdy nie jest wypełniana. Czy to dlatego, że {[2] } nie jest tym, o czym myślę? Hjelp!
Author: Stuart, 2010-02-23

5 answers

You want .children() instead (documentation here):

$(this).closest('tr').children('td.two').text();
 71
Author: Nick Craver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-23 01:42:57

Nick ma poprawną odpowiedź, ale chciałem dodać, że możesz również uzyskać dane komórki bez konieczności podawania nazwy klasy

var Something = $(this).closest('tr').find('td:eq(1)').text();

:eq(#) posiada indeks zerowy (link ).

 62
Author: Mottie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-23 02:52:16

Powinno działać dobrze:

var Something = $(this).children("td:nth-child(n)").text();
 5
Author: hhhqsun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-26 00:11:57

Więc możesz użyć parent (), aby dotrzeć do rodzica TR, a następnie użyć find, aby zebrać TD z klasą drugą

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

Lub

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

Użyj tyle co parent () ile głębokość klikniętego obiektu zgodnie z wierszem tr

Mam nadzieję, że to zadziała...
 4
Author: Yasin Ergul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-23 02:47:03

To również zadziała

$(this).parent().parent().find('td').text()
 4
Author: Anna.P,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-13 07:27:07