css Selektoren vs jquery Traversal

8

Mit jquery scheint es zwei Möglichkeiten zu geben, ein Listenelement innerhalb einer ungeordneten Liste innerhalb des DOM zu finden.

%Vor%

und

%Vor%

Gibt es einen Grund, warum letzteres vorzuziehen ist? Es scheint, als würde man mehr Code benötigen, um das gleiche Ergebnis zu erhalten.

    
cantdutchthis 30.04.2013, 20:25
quelle

2 Antworten

11

Ja. Geschwindigkeit. .find() wird jedes Mal gewinnen. Und Geschwindigkeit der Verarbeitung ist gleichbedeutend!

jsPerf-Geschwindigkeitstest, um zu zeigen, was ich meine

Obwohl .find() alles erhält, was ein Untergebener ist (Kinder, Kinder von Kindern, Kinder von Kindern von Kindern, usw.), und > ist ein direkter Kindselektor. Es ist eine bessere Äpfel-zu-Äpfel, um eines der folgenden zu vergleichen:

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

Wenn du .find('li') machst, wird es immer noch der schnellste Weg sein, sogar schneller als .children('li') .

aktualisiert jsPerf, um .children()

einzuschließen     
PlantTheIdea 30.04.2013, 20:28
quelle
0

1) Sie sind nicht gleich, die zweite Form wäre gleichbedeutend mit $("ul li"); und die erste entspricht $("ul").children("li")

2) Wenn Sie das zweite Formular verwenden, vereinfachen Sie die Parsing-Aufgabe von jQuery. Aber es macht Ihren Code weniger einfach, also würde ich es nicht empfehlen, es sei denn, Sie haben bewiesen, dass die Geschwindigkeit in Ihrem Fall sehr relevant ist. Dies bedeutet, dass Sie normalerweise mehr Code haben, zum Beispiel ein Element-Caching oder andere traversierende Funktionen, die die Verwendung von find rechtfertigen.

    
Denys Séguret 30.04.2013 20:28
quelle

Tags und Links