为什么jquery nth child在申请ul和li时给出不一致的结果

时间:2015-02-09 04:20:01

标签: jquery jquery-selectors

我有一个包含ul个组的容器,每个容器有4个li个。 我创建了第一个ul,然后通过Javascript复制其余部分。

当我打电话找到所有ul的第n个孩子时,例如$("ul:nth-child(1)"),它什么都不返回,第一个ul项目出现$("ul:nth-child(2)")(n正在开始)来自2)

但是当我尝试对li内的ul执行相同操作时,第一个li项目出现$("ul li:nth-child(1)")(n从1开始)

我在jQuery 1.11.1中开发,但是当使用1.11.0时,小提琴给出相同的结果(因为它们还没有从菜单中获得1.11.1)

我错过了什么或是jQuery中的错误吗?

参考: 在Windows 7企业版/英语版

下在Chrome 40.0.2214.93 m中测试

这是example fiddle

编辑:(更精确的愿望) 我并不是要找li,因为我知道如何确切地找到哪个li和哪个li与“>”虽然我的意思是甚至对ul元素和li元素使用相同的算法,但它给出了不同的结果。

我想使用nth-child在所有ul中找到(2n-1)ul,但它会给出错误的结果。我必须使用(3n-1)来找到每隔3个ul,因为起始元素比预期的要多1个。

(基于上面的例子,检索每3 ul个元素)

start from first `ul` element amongst 15 `ul`s (skip every 3 ul element)
the first ul element in the set $(".keywords ul:nth-child(1)") 
give nothing (not as expected)
eg. $(".keywords ul:nth-child(3n-1)"), when n = 1, first element is 2, the starting element in the set is 2. 

为什么还有1个元素级联?

(仅使用第一个列表来测试检索每3 li个元素)

$(".keywords ul:eq(0) li:nth-child(2n-1)")
the first li element in the set $(".keywords ul:eq(0) li:nth-child(1)") 
give the first element.(as expected) when n = 1, first element is 1, as expected.

因此,对于示例中的指定ul和li,跳过似乎不同。 虽然我仍然可以执行所需的结果,但在应用于ul时,它会级联1个元素。

2 个答案:

答案 0 :(得分:1)

ul:nth-childli:nth-child的含义不同。在第一种情况下,您正在寻找一个ul元素,它是其父元素的第n个子元素。在第二个中,您正在查找列表中的第n个li

答案 1 :(得分:0)

您需要使用后代选择器

$(".main-area .list-container .keywords ul > li:nth-child(1)").length

演示:Fiddle

您的选择器会尝试在ul内找到.main-area .list-container .keywords并且是其父级的第一个子元素。