Подтвердить что ты не робот

JQuery - получение текстового значения ячейки таблицы в той же строке, что и элемент с щелчком

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

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

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

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

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

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

4b9b3361

Ответ 1

Вы хотите вместо .children() (здесь):

$(this).closest('tr').children('td.two').text();

Ответ 2

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

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

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

Ответ 3

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

var Something = $(this).children("td:nth-child(n)").text();

Ответ 4

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

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

или

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

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

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

Ответ 5

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

$(this).parent().parent().find('td').text()