Javascript 获取与每行中的复合选择器匹配的第n个子项

Javascript 获取与每行中的复合选择器匹配的第n个子项,javascript,jquery,jquery-selectors,children,css-selectors,Javascript,Jquery,Jquery Selectors,Children,Css Selectors,假设我有以下标记 <div><p></p><blockquote></blockquote><ul>...</ul></div> <div><p></p><blockquote></blockquote><ul>...</ul></div> ... <div><p></p&g

假设我有以下标记

<div><p></p><blockquote></blockquote><ul>...</ul></div>
<div><p></p><blockquote></blockquote><ul>...</ul></div>
 ...
<div><p></p><blockquote></blockquote><ul>...</ul><ul></ul></div>
    .

    ..
...

    ..
    是否有一种jQuery选择器/遍历技术可以用来获得与每个div中的复杂选择器匹配的第n个子元素,这是健壮的(从某种意义上说,我可以更改选择器不匹配的元素,而不会把事情搞砸)

    以下是一些无法帮助说明问题的方法

     $("div").children("p, ul").filter(":eq(1)") // returns just the first <ul> in the first div
     $("div").children("p, ul:eq(1)") // returns all the p's and the first ul in the first div
     $("div").find(":not(blockquote):eq(1)") //returns the correct elements, but at the expense of having to reference the elements we're *not* after. Also not restricted to just children
     $("div").find(">:not(blockquote):eq(1)") ) // tackles the children problem, but ">" without a parent is not officially supported and jQuery want to deprecate (Can't find the reference but I raised it once in discussion on the jQuery bug boards and John Resig himself said this)
    
    $(“div”).children(“p,ul”).filter(“:eq(1)”)//仅返回第一个div中的第一个
      $(“div”).children(“p,ul:eq(1)”//返回第一个div中的所有p和第一个ul $(“div”).find(“:not(blockquote):eq(1)”/)返回正确的元素,但代价是必须引用我们*不*关注的元素。也不仅仅限于儿童 $(“div”).find(“>:not(blockquote):eq(1)”)//解决了子问题,但是没有父项的“>”是不受官方支持的,jQuery想要反对(找不到引用,但我在jQuery bug板上讨论过一次,John Resig自己也这么说)

    最后,在某些上下文中,我问这个问题是为了始终找到表的第I列,而不管第一列是否包含
    th
    td
    单元格是jQuery有一个
    n子选择器


    思考之后,我意识到需要某种类型的
    :is()
    选择器来包装复合选择器。jQuery不会实现它(),但后来我意识到双重否定与正是一样的,所以下面的方法适用于一般情况

    $("div").find(">:not(:not(p, ul)):eq(1)")
    

    真不敢相信我错过了。干杯。。。但仔细想想,对于一般情况,它仍然不太有效(尽管它完美地解决了我的表列问题:),因为我们不是在寻找父元素的第n个子元素,而是在寻找与选择器匹配的第n个子元素,这是不完全相同的。我制作了一个JSFIDLE来演示,但是这个站点有问题,但是本质上,如果前几个元素与选择器不匹配,那么第n个子元素就不会指向第n个匹配的子元素,它仍然会指向第n个子元素(我想……这就是我试图用JSFIDLE来测试的内容)@我不太理解。您的小提琴不起作用,因为
    eq
    是以零为基础的,而
    n个子
    不是。我希望第二行失败,因为我试图证明,找到匹配选择器的子项,然后返回其中的第n个(希望是我在问题中提出的问题,尽管这是一个微妙的问题,所以我可以更好地描述它),与返回匹配选择器的第n个子项不同(我认为,这是最接近您可以使用的解决方案:nth child)