2013-04-30 15 views
8

Z jquery wydają się być dwa sposoby na znalezienie elementu listy na nieuporządkowanej liście w DOM.selektory css a konwersja jquery

$("ul>li"); 

i

$("ul").find("li"); 

Czy istnieje powód, dlaczego ten ostatni może być bardziej korzystne? Wygląda na to, że potrzeba więcej kodu, aby uzyskać ten sam wynik.

+1

'find' wybiera wszystkie elementy pasujące zstępnym,'> 'jest bezpośrednim selektor dziecko. To pokazuje, że nie przeczytałeś dokumentacji jQuery. – undefined

+0

Mylisz się. '$ (" ul> li ")' znajdzie tylko pierwsze 'li' dla dowolnego' ul', gdzie '$ (" ul "). find (" li ")' znajdzie wszystkie 'li' w każdym' ul' . Masz na myśli w pierwszym przypadku: '$ (" ul li ")' prawda? – WooCaSh

+0

* To zależy *. W większości przypadków próba zdecydowania, która wersja ma być używana w oparciu o wydajność, jest wstępnie dojrzałą optymalizacją, więc w większości przypadków lepiej jest wybrać ten, który jest łatwiejszy w utrzymaniu i/lub łatwy do odczytania/zrozumienia, niż martwić się, który z nich jest szybciej. –

Odpowiedz

11

Yup. Prędkość. .find() wygrywa za każdym razem. Szybkość przetwarzania jest równoznaczna!

jsPerf speed test to show what I mean

Chociaż .find() dostanie wszystko, co jest drugorzędny (dzieci, dzieci, dzieci, dzieci dzieci dzieci, etc), a > jest bezpośrednim selektor dziecko. Jest to lepsze jabłka do jabłek porównać jedną z następujących czynności:

  • $('ul li') vs $('ul').find('li')
  • $('ul > li') vs $('ul').children('li')

Chociaż jeśli nie .find('li') to będzie nadal być najszybszym sposobem zrób to, nawet szybciej niż .children('li').

updated jsPerf to include .children()

0

1) nie są one takie same, druga forma byłaby równoważna $("ul li"); a pierwsza z nich jest odpowiednikiem $("ul").children("li")

2) Jeśli używasz drugiej postaci, uprościć zadanie analizowania jQuery. Ale sprawia, że ​​twój kod jest mniej prosty, więc nie polecałbym go, chyba że udowodniono, że prędkość jest bardzo ważna w twoim przypadku. Mówi się, że zwykle masz więcej kodu, na przykład niektóre buforowanie elementów lub inne funkcje ruchu, uzasadniające użycie find.