Wybierz wszystkie elementy potomne oprócz pierwszego


83

Powiedz, że mam:

<ul>
 <li>First item</li>
 <li>Second item</li>
 <li>Third item</li>
</ul>

Jak wybrałbym wszystkie elementy podrzędne po pierwszym z użyciem jQuery? Mogę więc osiągnąć coś takiego:

<ul>
 <li>First item</li>
 <li class="something">Second item</li>
 <li class="something">Third item</li>
</ul>

Odpowiedzi:



36

Opierając się na mojej całkowicie nienaukowej analizie czterech przedstawionych tu metod, wygląda na to, że nie ma między nimi dużej różnicy prędkości. Uruchomiłem każdą na stronie zawierającej serię nieuporządkowanych list o różnej długości i ustawiłem je w czasie za pomocą profilera Firebug.

$("li").slice(1).addClass("something");

Średni czas: 5,322 ms

$("li:gt(0)").addClass("something");

Średni czas: 5,590 ms

$("li:not(:first-child)").addClass("something");

Średni czas: 6,084 ms

$("ul li+li").addClass("something");

Średni czas: 7,831 ms


3
Natknąłem się na to pytanie, ponieważ potrzebowałem wszystkich dzieci oprócz pierwszego. Robiłem to na wszystkich h3, które były w div. Uruchomiłem trzy zapytania, takie jak ty powyżej na mojej stronie i wyszedłem z: not (: first-child) jako najszybsze 2-3 razy. Myślę, że struktura Twojej strony może mieć również wpływ na szybkość profilu. Tak czy inaczej, ta odpowiedź nauczyła mnie, jak używać profilera Firebug i dziękuję za to.
RedWolves


9

Bardziej eleganckie zapytanie (zaznacz wszystkie elementy li, które są poprzedzone elementem li):

$('ul li+li')


1
$ ("li + li") prawdopodobnie będzie działać szybciej niż $ ("li: not (: first-child)")
Sergey Ilinsky,




0

Użyj metody jQuery .not ()

$('li').not(':first').addClass('something');

LUB

var firstElement = $('li').first();
$('li').not(firstElement).addClass('something');
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.