获取jQuery表中的第三个单元格

获取jQuery表中的第三个单元格,jquery,Jquery,我以为我能处理好这件事,但显然不行。我们又来了。我想要单元格的值,两个空格的值,从我点击的地方。这将是该行的第三列。下面是一些需要理解的代码 我这样创建表 php $project_info = $db->prepare(" SELECT projects.id, projects.project_name, projects.pm, // ...more columns F

我以为我能处理好这件事,但显然不行。我们又来了。我想要单元格的值,两个空格的值,从我点击的地方。这将是该行的第三列。下面是一些需要理解的代码

我这样创建表

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>";
现在,当警报触发时,对话框中没有任何内容。因此,我没有从正确的单元格中获取值。我试图从逻辑上把它分解,但我被卡住了。这是我的理解,这显然是错误的

  • $(this)=“td”元素内的图像
  • parent()=保存图像的实际“td”元素
  • find('td:eq(3)')=从父位置(在本例中为行的第三列)查找特定的'td'
  • .text()=所选单元格的文本值

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

    考虑到
    eq
    是基于零的,所以如果你想得到第三列,你需要使用
    eq(2)


    正如其他答案已经指出的那样,家长不会给您该行,因为
    家长就是
    td
    。您可以使用您可以使用
    .closest()
    查找行,然后查找单元格(0基于
    eq
    ):


    如果您确实希望单元格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();
     });
    
    有几件事:

  • :eq()
    是基于零的,因此需要
    td:eq(2)
  • $(this)
    是图像,因此
    $(this).parent()是
    td
    find()
    搜索子体,在您选择的
    td
    中没有
    td
    s
  • 所以你需要这个:

    $(this).closest('tr').find('td:eq(2)').text();
    
    closest()
    从当前元素开始,向上遍历DOM,直到找到与选择器匹配的元素。从父级
    tr
    ,您可以
    查找
    td
    s


    Fiddle,用div代替image:

    谢谢Jason,这很有魅力,解释正是我需要的,所以我希望不用再问这样的问题了+1和answer AcceptedId您每次只想看到第3列,还是只想看到单击位置的单元格2列?仔细看下面的答案。他们中的大多数人只是选择了第三列,不管点击发生在哪里。@DevlshOne是的,我不想要任何第三列。我想要单击发生时所在行的第三列。我也不想要:nth child(x)值,因为它将返回列中的所有值。谢谢你指出这一点是的,我看到杰森的回答。这正是我需要的解释。非常感谢你+感谢你的帮助+1另一种正确的方法,我刚刚注意到你的评论。这是否意味着Jason的答案不会产生相同的结果?因为它现在给了我想要的价值。与yoursJason的答案相同,因为他的脚本只有在单击类
    编辑项目记录时才会触发,这是单元格的第一列。因此,当它返回第三列时,它做的是正确的。我的答案可以用于任何单元格,因为它不是由特定类别触发的,只是由
    td
    中的
    img
    触发的。因此,它可以是第16个单元格中的
    img
    ,并返回第18个单元格的文本。英雄联盟你明白了吗?事实上,是的,这是一个很棒的解释。谢谢你,托尼,我还有一个问题,这个问题反过来也行吗。比如说图像在第13个单元格中,如果你把
    ('td:eq(myTD-2)
    放进去,它会返回第11个单元格的值吗?是的,它肯定会返回,但你需要检查并确保
    myTD>2
    。我认为这种方法不适合使用负数
    $('body').on('click', '.edit_project_record', function() {
        pid = $(this).closest('tr').find('td:eq(2)').text();
        alert(pid); 
        loadEditProject();
    });
    
    $('.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();
     });
    
    $(this).closest('tr').find('td:eq(2)').text();