2013-04-30 6 views
8

DOM içinde sırasız liste içinde bir liste öğesini bulma iki yolu var gibi görünüyor.css seçiciler jquery ile

$("ul>li"); 

ve

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

ikincisi daha tercih olabilir bir nedeni var mı? Aynı sonucu elde etmek için daha fazla koda ihtiyaç duyulacak gibi görünüyor.

+1

'find''> 'doğrudan çocuk seçicidir, eşleşen tüm alt öğelerini seçer. Bu, jQuery belgelerini okumadığınızı gösterir. – undefined

+0

Hatalısınız. '$ ("Ul> li")' herhangi 'ul', nerede' $ ("ul") için sadece ilk 'li' bulacaksınız. Find ("li")' Her 'ul' tüm' li' bulacaksınız . İlk durumda demek istediniz: '$ (“ ul li ”)' değil mi? – WooCaSh

+0

* Bu, * bağlıdır. çoğu durumda daha sürdürülebilir olanı seçmek daha mantıklı performansına göre kullanılacak versiyonu karar vermeye çalışıyor Çoğu durumda, ön-olgun optimizasyon ve/veya kolay/biri olan endişesi yerine anlamaya okumak için Daha hızlı. –

cevap

11

Evet. Hız. .find() her seferinde kazanacak. Ve işlem hızı da aynı! .find() rağmen

jsPerf speed test to show what I mean

ikinci derecedeki bir şeyi alacak (Çocukların, çocuk, çocuk çocuklar vb çocukları) ve > doğrudan alt seçicidir. Onun aşağıdakilerden birini karşılaştırmak elma-elma daha iyi: sen .find('li') yaparsanız

  • $('ul li')$('ul').children('li')

vs

  • $('ul > li')$('ul').find('li') vs hala en hızlı şekilde olacak olsa da .children('li')'dan bile daha hızlı.

    updated jsPerf to include .children()

  • 0

    1) onlar aynı değiliz, ikinci form $("ul li"); eşdeğer olacaktır ve ilki $("ul").children("li")

    2) İkinci formu kullanarak ediyorsanız, jQuery'nin ayrıştırma görevini basitleştirmek için eşdeğerdir. Ama bu sizin kodunuzu daha basit hale getirir, böylece sizin durumunuzda hızın çok alakalı olduğunu kanıtlamadıkça tavsiye etmem. Bu find kullanımını haklı, genellikle örneğin bazı eleman önbelleğe alma veya başka bir travers fonksiyonları ile daha koduna sahip söyleniyor.