テーブルセルのリンクをクリックします。この同じテーブル行内の特定のセルの値を取得する必要があります。
<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>
4番目のセルのリンクにクリックハンドラーを接続しています。そのクリックハンドラーは、モーダルウィンドウを開く関数を呼び出します。モーダルのフォームが送信されると、リンクがクリックされた行からこのモーダルに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
が私が考えているものではないからですか?ヘルプ!
代わりに.children()
が必要です( documentation here ):
$(this).closest('tr').children('td.two').text();
ニックは正しい答えを持っていますが、クラス名を必要とせずにセルデータを取得することもできます
_var Something = $(this).closest('tr').find('td:eq(1)').text();
_
:eq(#)
にはゼロベースのインデックスがあります( link )。
それはうまくいくはずです:
var Something = $(this).children("td:nth-child(n)").text();
したがって、parent()を使用して親trに到達し、次にfindを使用してクラス2のtdを収集できます。
var Something = $(this).parent()。find( "。two")。html();
または
var Something = $(this).parent()。parent()。find( "。two")。html();
tr行に従ってクリックされたオブジェクトの深さをparent()と同じくらい使用します
これがうまくいくことを願っています...
これも機能します
$(this).parent().parent().find('td').text()