3 Stimmen

Ermitteln des n-ten untergeordneten Elements, das ebenfalls einem zusammengesetzten Selektor in jeder Zeile entspricht

Angenommen, ich habe die folgende Markup

<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>

Gibt es eine jQuery-Selektor/Traversal-Technik, die ich verwenden kann, um das n-te Kind zu erhalten, das mit einem komplexen Selektor in jedem Div übereinstimmt, der robust ist (in dem Sinne, dass ich Elemente ändern kann, die nicht durch den Selektor übereinstimmen, ohne die Dinge durcheinander zu bringen)

Hier sind einige Ansätze, die nicht funktionieren, um das Problem zu verdeutlichen

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

Schließlich für einige Kontext, ich frage dies, um immer die i-te Spalte einer Tabelle zu finden, unabhängig davon, ob die erste Spalte enthält oder nicht th ou td Zellen

4voto

dknaack Punkte 58366

Ja, jQuery hat eine nth-child selector

jQuery - :nth-child() Selektor

1voto

wheresrhys Punkte 21136

Nachdem ich darüber nachgedacht habe, ist mir klar geworden, dass wir eine Art von :is() Selektor, um den zusammengesetzten Selektor zu umhüllen. jQuery wird ihn nicht implementieren ( aus guten Gründen ), aber dann wurde mir klar, dass eine doppelte Verneinung dasselbe ist wie eine positive, so dass die folgende Formel für den allgemeinen Fall gilt

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X