jQuery - получение текстового значения ячейки таблицы в той же строке, что и элемент, по которому щелкнули - PullRequest
47 голосов
/ 23 февраля 2010

Я нажимаю на ссылку в ячейке таблицы. Мне нужно получить значение определенной ячейки в этой же строке таблицы.

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

У меня есть обработчик кликов, прикрепленный к ссылке в четвертой ячейке. Этот обработчик кликов вызывает функцию, которая открывает модальное окно. Когда форма в модале отправляется, я также хочу передать значение td class = "two" из строки, в которой была нажата ссылка на этот модал.

Вот функция, которая отправляет модальное значение (проблемная область получает правильное значение для переменной 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
    });        
};

Проблема в том, что я не могу получить правильное значение для чего-то. Это должно быть значение td class = two в той же строке, что и элемент, по которому щелкнули.

Способ, которым все это объединяется. Нажмите на целевую ссылку, которая вызывает метод с именем Send_Click (). Send_Click выполняет некоторые проверки и затем вызывает Send (), но значение для Something никогда не заполняется. Это потому что this не то, о чем я думаю? Hjelp!

Ответы [ 5 ]

81 голосов
/ 23 февраля 2010

Вы хотите .children() вместо ( документация здесь ):

$(this).closest('tr').children('td.two').text();
63 голосов
/ 23 февраля 2010

Ник имеет правильный ответ, но я хотел бы добавить, что вы также можете получить данные ячейки, не используя имя класса

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

:eq(#) имеет нулевой индекс ( ссылка ).

5 голосов
/ 16 июня 2011

должно работать нормально:

var Something = $(this).children("td:nth-child(n)").text();
4 голосов
/ 10 июля 2012

Это также будет работать

$(this).parent().parent().find('td').text()
4 голосов
/ 23 февраля 2010

, чтобы вы могли использовать parent (), чтобы связаться с родительским tr, а затем использовать find, чтобы собрать td со вторым классом

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

или

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

используйте столько же, сколько parent (), какую бы глубину кликаемого объекта в соответствии со строкой tr

надеюсь, что это работает ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...