2015-02-25 14 views
5

możemy użyć $('body>div:lt(2)') dostać pierwsze 2 DIV S w body, jeśli body>div została przypisana do zmiennej:Jak zastosować pseudo selektor do zmiennej DOM jQuery?

var s = $('body>div') 

możemy nadal korzystać z selektora pseudo lub inne sposoby, aby uzyskać pierwsze 2 DIV s w odniesieniu do zmiennej? Oczywiście s: lt (2) nie zadziała. Co mogę myśleć jest $(s.slice(0,2)), ale czy istnieje lepszy sposób to zrobić?

Odpowiedz

5

Można użyć metody jQuery: .filter(), która pozwala, między innymi, na argument selektora do filtrowania wybranych węzłów w obiekcie jQuery.

var filtered = s.filter(':lt(2)'); 

Należy pamiętać, że to nie zmienia pierwotnej wartości s, więc będziesz miał wszystkie swoje div sw s, a twoje filtrowane div sw filtered.


Alternatywnie, jak już zaznaczono, a zostało omówione w komentarzach, można użyć Array.prototype.slice.

var sliced = $(s.slice(0,2)); 

To technicznie działa szybciej niż .filter(). Jednak może również sprawić, że twój kod stanie się mniej czytelny/zrozumiały. Wzrost wydajności może być również bardzo znikomy, chyba że wykonasz tę operację wiele tysięcy razy lub więcej w bardzo krótkim czasie.

Czytelność a wydajność to walka, którą często toczy się programowanie, a ostatecznie jesteś jedynym, który może zdecydować, który z nich wygra dla twojego własnego kodu.

+0

Pod względem wydajności użycie 'plaster()' jest lepsze, ponieważ polegasz na natywnej funkcjonalności JS. – AlexL

+0

1+ .. Nie widzę powodu, dla którego to zostało odrzucone. Robi dokładnie to, co chce OP. Wydajność jest prawdopodobnie znikoma. –

+0

Został wycofany, ponieważ OP chce lepszego sposobu. O ile ta odpowiedź zapewnia lepszy sposób w zakresie czytelności, wariant ten nie jest najlepszy pod względem wydajności w porównaniu z sugerowaną alternatywą OP. – AlexL