Получение n-го потомка, который также соответствует составному селектору в каждой строке - PullRequest
3 голосов
/ 07 февраля 2012

Скажите, у меня есть следующая разметка

<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-й столбец таблицы независимо от того, содержит ли первый столбец th или td ячеек

Ответы [ 2 ]

4 голосов
/ 07 февраля 2012

Да, jQuery имеет nth-child selector

jQuery -: селектор nth-child ()

1 голос
/ 07 февраля 2012

Подумав об этом, я понял, что нужен какой-то селектор :is(), чтобы обернуть составной селектор. jQuery не будет реализовывать это ( по уважительным причинам ), но потом я понял, что двойной отрицательный результат - это то же самое, что и положительный, поэтому для общего случая

работает следующее
$("div").find(">:not(:not(p, ul)):eq(1)")
...