【发布时间】:2010-02-04 01:01:24
【问题描述】:
$('table td:eq(2) a') 返回第三列的a 标签,但只从第一行返回。
为什么?
【问题讨论】:
$('table td:eq(2) a') 返回第三列的a 标签,但只从第一行返回。
为什么?
【问题讨论】:
这不是错误,但绝对令人困惑。什么会给你你期望的结果是:
$('table td:nth-child(3) a')
虽然 :nth-child 和 :eq 看起来非常相似,但从您预期的结果中可以看出,行为可能完全不同。
可以在here 找到关于此的 jQuery 文档。 它指出:
:nth-child(n) 伪类很容易与 :eq(n) 混淆,尽管两者会导致匹配的元素截然不同。使用 :nth-child(n),所有子元素都被计算在内,无论它们是什么,并且仅当指定的元素与附加到伪类的选择器匹配时才会被选中。使用 :eq(n) 只计算附加到伪类的选择器,不限于任何其他元素的子元素,并且选择第 n 个。
简单来说,eq(2) 将选择 while 结果集中的第三个元素,而 :nth-child(3) 将选择其父元素的第 3 个子元素。在这种情况下,父级将是它的 tr。
【讨论】:
不,这不是错误。它与table td匹配的集合中的第三个元素中的锚标记匹配,因此它在表格的第三个单元格中。
(如果表格只有两个单元格宽,您将获得第二行中的第一个单元格。)
【讨论】:
简单来说,
根据您的代码$('table td:eq(2)') 在table 中返回第三个td 作为索引=0 的字符串,它将选择第三个td 见下文
$('table td:eq(4)') 的结果将是表格的第五个td,见下表
要选择整个第二列,请使用 :nth-child() 索引从 1 开始
例如:$('table td:nth-child(2)')
希望你能得到答案。
【讨论】:
$('table td:eq(2)') 将选择所有'table td',索引eq(2) 将从该集合中选择第三个td。所以第三列下只有一个a。
【讨论】: