如何正确地使用jQuery中的第n个子对象来遍历类型的对象?

如何正确地使用jQuery中的第n个子对象来遍历类型的对象?,jquery,jquery-selectors,Jquery,Jquery Selectors,我遇到了一个奇怪的bug,它似乎特定于jQuery中的nth child选择语法。我可以使用$('list')。each()成功地仅单步遍历下面HTML中的列表,但是当使用nth childselection子句时,它似乎会计算两个list块之间的标记 对于HTML: <list id="c" view="vw_project_content" where="`project` = %%2%%"> <item> <b>$$title$$

我遇到了一个奇怪的bug,它似乎特定于
jQuery
中的
nth child
选择语法。我可以使用
$('list')。each()
成功地仅单步遍历下面HTML中的列表,但是当使用
nth child
selection子句时,它似乎会计算两个
list
块之间的

标记

对于HTML:

<list id="c" view="vw_project_content" where="`project` = %%2%%">
    <item>
        <b>$$title$$</b><br />
        $$message$$
        <br />
    </item>
</list>
<br />
Discussion:
<list id="p" view="vw_project_posts" where="`project` = %%2%%" limit="100">
    <item>
        <b>$$poster_id$$</b><br />
        $$message$$
        <br />
    </item>
</list>
我收到输出:

[list#c, prevObject: jQuery.fn.init(1)]
[prevObject: jQuery.fn.init(1)]
[list#p, prevObject: jQuery.fn.init(1)]
但是,如果我删除它生成的两个
列表
块之间的

[list#c, prevObject: jQuery.fn.init(1)]
[list#p, prevObject: jQuery.fn.init(1)]
[prevObject: jQuery.fn.init(1)]

是否有一种正确的方法可以可靠地选择特定类型的第n个子项,而不需要知道目标块之间存在什么?

看到这些结果的原因在于第n-child()选择器的工作方式。在您的示例代码中,当您尝试使用
$('list:nth child(2)')
时,您告诉它获取的是一个
列表
元素,它是其父元素的第二个子元素。在HTML
list中,#c
是其父级的第一个子级,
list#p
是其父级的第三个子级。这就是为什么当

标记存在时,您会收到
$('list:nth child(2)')
的空响应

如果您试图在一组
列表
元素中获得一个特定位置,则可以尝试使用
eq()
选择器。例如:

注意:eq()选择器是0索引的,而不是1索引的

console.log($('list:eq(0)'));
console.log($('list:eq(1)'));
console.log($('list:eq(0)'));
console.log($('list:eq(1)'));