我以为我对此有一个不错的处理,但显然不是。所以我们再来一次我想从单击的位置两个空格的单元格的值。它将是该行的第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();
});
现在当警报触发时,对话框中没有任何内容。所以我没有从正确的单元格中获取值。我试图在逻辑上打破这个,但我被卡住了。这是我的理解,明显错误
请向我解释我的逻辑在哪里,所以我可以解决这个问题。谢谢
答案 0 :(得分:3)
考虑到eq
为零,所以如果你想获得第三列,你需要使用eq(2)
pid = $(this).closest('tr').find('td:eq(2)').text();
正如其他人的答案已经指出的那样,父母不会给你排,因为this
父母是td
。您可以使用closest
答案 1 :(得分:3)
一些事情:
:eq()
从零开始,因此您需要td:eq(2)
。$(this)
是图片,因此$(this).parent()
是td
。 find()
会搜索后代,并且您选择的td
内没有td
。所以你需要这个:
$(this).closest('tr').find('td:eq(2)').text();
closest()
从当前元素开始并遍历DOM,直到找到与选择器匹配的元素。在家长tr
中,您可以find
td
s。
小提琴,用div而不是图像:http://jsfiddle.net/bAz8P/
答案 2 :(得分:1)
您可以使用.closest()
查找该行,然后找到该单元格(0基于eq
):
$('body').on('click', '.edit_project_record', function() {
pid = $(this).closest('tr').find('td:eq(2)').text();
alert(pid);
loadEditProject();
});
答案 3 :(得分: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();
});