获得与每行中的复合选择器匹配的第n个孩子

时间:2012-02-07 15:40:45

标签: 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><blockquote></blockquote><ul>...</ul><ul></ul></div>

是否有一个jQuery选择器/遍历技术,我可以用来让第n个孩子匹配每个div中的复杂选择器,这是一个健壮的(在某种意义上我可以改变选择器不匹配的元素而不会弄乱事物)

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

 $("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)

最后,对于某些上下文,我问这个是为了总是找到表的第i列,无论第一列是否包含thtd个单元

2 个答案:

答案 0 :(得分:4)

是的,jQuery有一个nth-child selector

jQuery - :nth-child() Selector

答案 1 :(得分:1)

在考虑之后,我意识到需要的是某种:is()选择器来包装复合选择器。 jQuery不会实现它(for good reasons),但后来我意识到双重否定与正面相同,所以以下适用于一般情况

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