jQuery selector $('table td:eq(2)a')仅从第一行获取单元格

时间:2010-02-04 01:01:24

标签: jquery jquery-selectors

$('table td:eq(2) a')返回第三列的a标记,但仅返回第一行。

为什么?

4 个答案:

答案 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,见下文

enter image description here

$('table td:eq(4)')结果的

将是表格的第五个td,见下文

enter image description here

选择整个第二列使用:nth-​​child()索引从1开始

ex:$('table td:nth-child(2)')

enter image description here

我希望你得到答案。

答案 3 :(得分:0)

$('table td:eq(2)')将选择所有'table td',索引eq(2)将从此集合中选择第三个td。所以在第三列下面只有一个a