0

私はこれについてまともなハンドルを持っていると思っていましたが、どうやらそうではありません。それでは、また行きます。クリックした場所から 2 スペース上のセルの値が必要です。行の 3 列目になります。理解するためのコードを次に示します。

私はこのようなテーブルを作成します

php

$project_info = $db->prepare("
    SELECT  projects.id,
        projects.project_name,                  
        projects.pm,    
        // ...more columns   
    FROM projects
    WHERE account_id = ?                        
"); 

$project_info->bindValue(1, $aid, PDO::PARAM_STR);
$project_info->execute();       

echo "<table class='projects_contentTable'>";
echo "<th class='content_th'>" . "" . "</th>";
echo "<th class='content_th'>" . "" . "</th>";
echo "<th class='content_th'>" . "Job #" . "</th>";
// ...more headers   

while ($row = $project_info->fetch(PDO::FETCH_ASSOC)) {             
    echo "<tr>";
    echo "<td class='content_td'>" . "<img src='images/edit.png' class='edit_project_record'/>" . "</td>";
    echo "<td class='content_td'>" . "<img src='images/view.png' class='view_project_record'/>" . "</td>";              
    echo "<td class='content_td'>" . "<a href='#'>" . $row['id'] . "</a>" . "</td>";
    // ...more td's
    echo "</tr>";               
}
echo "</table>";

セルから値を取得するこのコード

jquery

$('body').on('click', '.edit_project_record', function() {
    pid = $(this).parent().find('td:eq(3)').text();
    alert(pid); 
    loadEditProject();
});

アラートが発生すると、ダイアログ ボックス内には何も表示されなくなります。したがって、正しいセルから値を取得していません。これを論理的に分解しようとしましたが、行き詰まっています。これが私の理解ですが、明らかに間違っています

  1. $(this) = 'td' 要素内の画像。
  2. parent() = 画像を保持する実際の 'td' 要素
  3. find('td:eq(3)') = 親の場所 (この場合は行の 3 列目) から特定の 'td' を見つけます。
  4. .text() = 選択したセルのテキスト値

これを修正できるように、私のロジックがどこで壊れているかを説明してください。ありがとうございました

4

4 に答える 4

3

いくつかのこと:

  1. :eq()はゼロベースなので、必要td:eq(2)です。
  2. $(this)はイメージ$(this).parent()ですtdfind()は子孫を検索しますが、選択tdした 内に はありません。td

したがって、これが必要です:

$(this).closest('tr').find('td:eq(2)').text();

closest()現在の要素から開始し、セレクターに一致する要素が見つかるまで DOM をトラバースします。親から、trs .findtd

イメージの代わりに div を使用したフィドル: http://jsfiddle.net/bAz8P/

于 2013-08-03T02:49:53.253 に答える
3

これはゼロベースであることを考慮してeqください。3 番目の列を取得する場合は、次を使用する必要があります。eq(2)

pid = $(this).closest('tr').find('td:eq(2)').text();

他の回答がすでに指摘しているように、親thistd. あなたが使用することができますclosest

于 2013-08-03T02:45:46.927 に答える
1

行を見つけてからセルを見つけるために使用できます.closest()(に基づく0 eq):

$('body').on('click', '.edit_project_record', function() {
    pid = $(this).closest('tr').find('td:eq(2)').text();
    alert(pid); 
    loadEditProject();
});
于 2013-08-03T02:49:01.410 に答える
1

実際にクリックしたセルの右側にセル 2 セルが必要な場合は...

$('.projects_contentTable').on('click', 'td img', function() {
    var myTD = $('td').index(this);
    var pid = $(this).closest('tr').find('td:eq(myTD + 2)').text();
    alert(pid);
    loadEditProject();
 });
于 2013-08-03T02:49:29.463 に答える