$('table td:eq(2) a')
返回第三列的a
标记,但仅返回第一行。
为什么?
答案 0 :(得分:6)
这不是一个错误,但它绝对令人困惑。能给你预期结果的是:
$('table td:nth-child(3) a')
虽然:nth-child和:eq看起来非常相似,但从您期望的结果可以看出,行为可能完全不同。
可以找到关于此的jQuery文档here。 它声明:
:nth-child(n)伪类很容易与:eq(n)混淆,即使这两者可能导致显着不同的匹配元素。使用:nth-child(n),所有子节点都被计数,无论它们是什么,只有在与附加到伪类的选择器匹配时才选择指定的元素。使用:eq(n)只计算附加到伪类的选择器,不限于任何其他元素的子项,并选择第n个。
简单来说,eq(2)将选择while结果集中的第三个元素,而:nth-child(3)将选择其父级的3个子元素。在这种情况下,父母将是其tr。
答案 1 :(得分:3)
不,这不是错误。它匹配table td
匹配的集合中第三个元素中的锚标记,因此它位于表格的第三个单元格中。
(如果表格只有两个单元格宽,那么您将获得第二行中的第一个单元格。)
答案 2 :(得分:2)
简单来说,
根据您的代码$('table td:eq(2)')
返回td
中的第三个table
,因为从index = 0开始,它将选择第三个td
,见下文
$('table td:eq(4)')
结果的将是表格的第五个td
,见下文
选择整个第二列使用:nth-child()索引从1开始
ex:$('table td:nth-child(2)')
我希望你得到答案。
答案 3 :(得分:0)
$('table td:eq(2)')
将选择所有'table td'
,索引eq(2)
将从此集合中选择第三个td
。所以在第三列下面只有一个a
。