【问题标题】:jQuery selector $('table td:eq(2) a') get the cell only from the first rowjQuery 选择器 $('table td:eq(2) a') 仅从第一行获取单元格
【发布时间】:2010-02-04 01:01:24
【问题描述】:

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

为什么?

【问题讨论】:

    标签: jquery jquery-selectors


    【解决方案1】:

    这不是错误,但绝对令人困惑。什么会给你你期望的结果是:

    $('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。

    【讨论】:

    • 我认为这可能是错误的,想想当每行有 5 列时。 "table td:nth-child(3)" 将选择第一行的第三列和第二行的第一列...
    • 你说“:nth-child(3) 将选择其父级的 3 个子级。在这种情况下,父级将是它的 tr。”如果这是真的,我该如何将表作为父级做同样的事情?
    【解决方案2】:

    不,这不是错误。它与table td匹配的集合中的第三个元素中的锚标记匹配,因此它在表格的第三个单元格中。

    (如果表格只有两个单元格宽,您将获得第二行中的第一个单元格。)

    【讨论】:

    • 没关系。但是为什么第二行的第三个单元格不包括?
    • 正如 Guffa 解释的那样,表 td 获取表中的所有 td 元素。然后 eq(2) 从整个集合中选择第二个。
    【解决方案3】:

    简单来说,

    根据您的代码$('table td:eq(2)') 在table 中返回第三个td 作为索引=0 的字符串,它将选择第三个td 见下文

    $('table td:eq(4)') 的结果将是表格的第五个td,见下表

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

    例如:$('table td:nth-child(2)')

    希望你能得到答案。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-28
        • 2011-04-30
        • 1970-01-01
        • 2014-09-07
        • 1970-01-01
        • 2014-09-06
        • 1970-01-01
        • 2013-12-14
        相关资源
        最近更新 更多