0

我以为我对此有很好的处理,但显然不是。所以我们又来了。我想要从我单击的位置两个空格的单元格的值。这将是该行的第三列。这是一些要理解的代码。

我这样创建表

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)') = 从父位置查找特定的 'td',在本例中为行的第三列。
  4. .text() = 所选单元格的文本值

请向我解释我的逻辑在哪里被破坏,以便我可以解决这个问题。谢谢

4

4 回答 4

3

考虑到它eq是从零开始的,所以如果你想获得第三列,你需要使用eq(2)

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

正如其他答案已经指出的那样, parent 不会给你行,因为thisparent 是td. 你可以使用closest

于 2013-08-03T02:45:46.927 回答
3

几件事:

  1. :eq()是从零开始的,所以你需要td:eq(2).
  2. $(this)是图像,$(this).parent()也是td。搜索后代,并且您选择的find()中没有tds 。td

所以你需要这个:

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

closest()从当前元素开始遍历 DOM,直到找到匹配选择器的元素。从 parent ,tr您可以s.findtd

小提琴,用 div 代替图像:http: //jsfiddle.net/bAz8P/

于 2013-08-03T02:49:53.253 回答
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 回答