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>

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

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

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

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

47
задан rg88 1 May 2013 в 09:12
поделиться

3 ответа

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

$(this).closest('tr').children('td.two').text();
82
ответ дан 7 November 2019 в 12:53
поделиться

Вот подход, который я использовал для обнаружения сбоев построения из MSDeploy при удаленном запуске скрипта Nant для развертывания. Это не идентичный scenerio, но должен дать вам концепцию, чтобы идти с. В основном вы можете запустить это из оболочки, вам нужен язык сценариев, как powershell, чтобы захватить вывод и чем пост обрабатывает обычный текст, возвращающийся из msdeploy. Я разобрал эту проблему с командой MSDeploy и дал им знать, что с этим трудно справиться.

http://www.lostechies.com/blogs/hex/archive/2009/12/29/update-on-using-msdeploy-for-remote-deployments.aspx

-121--3311357-

[Кто-нибудь знает] другие грамматические «особенности» современных языков программирования?

Один из моих любимых, Modula-3 , был разработан в 1990 с благословением Никлауса Вирта как новейший в то время язык в «семье Паскаля». Кто-нибудь еще помнит эти ужасные бои о том, где точка с запятой должна быть разделителем или терминатором ? В Modula-3, выбор за вами! EBNF для последовательности операторов имеет значение

stmt ::= BEGIN [stmt {; stmt} [;]] END

Аналогично, при записи альтернативных вариантов в инструкцию CASE , Modula-3 позволяет использовать вертикальную строку | в качестве разделителя или префикса. Таким образом, вы можете записать

CASE c OF
| 'a', 'e', 'i', 'o', 'u' => RETURN Char.Vowel
| 'y' => RETURN Char.Semivowel
ELSE RETURN Char.Consonant
END

или вы можете оставить от начальной планки, возможно, потому, что вы предпочитаете написать OF в этой позиции.

Я думаю, что мне нравилось так же, как сам дизайн, это осознание дизайнерами того, что идет религиозная война и их упорство в поиске способа поддержки обеих сторон. Пусть программист выбирает!


P.S. Objective Caml допускает разрешительное использование | в выражениях случаев, в то время как более ранний и близкородственный диалект Standard ML не имеет. В результате выражения случаев часто являются более уродливыми в коде Standard ML.


EDIT : После просмотра ответа T.E.D. я проверил грамматику Modula-2, и он правильный, Modula-2 также поддерживает точку с запятой в качестве терминатора, но через устройство пустого оператора, который делает вещи, как

x := x + 1;;;;;; RETURN x

законным. Полагаю, это неплохо. Однако Modula-2 не позволял гибко использовать разделитель корпуса | ; похоже, это произошло с Modula-3.

-121--1689622-

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

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

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

64
ответ дан 7 November 2019 в 12:53
поделиться

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

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

или

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

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

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

4
ответ дан 7 November 2019 в 12:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: