JQuery kullanarak hemen alt div öğelerini sayma


180

Aşağıdaki HTML düğümü yapısı var:

<div id="foo">
  <div id="bar"></div>
  <div id="baz">
    <div id="biz"></div>
  </div>
  <span></span>
</div>

fooBu türden olan yakın çocukların sayısını nasıl hesaplayabilirim div? Yukarıdaki örnekte, sonuç iki ( barve baz) olmalıdır.


1
Farklı yaklaşımlar arasındaki hız farkını görmek için bir jsperf testi ekledim. aşağıdaki cevabımı gör
— manikanta

Yanıtlar:


345
$("#foo > div").length

Div 'olan' foo 'kimliğine sahip öğenin doğrudan alt öğeleri. Daha sonra üretilen sargılı setin boyutunu almak.


1
Sadece Cuma günü jQuery ile tablo sütunları saymak nasıl merak ediyordum. Ben de benzer bir yaklaşım gerekecek: $('#table > th').size().
— Jim Schubert

1
Bazen bu işi yapmaz ve $ ( '# foo') kullanmak zorunda çocuklar () @mrCoder göre zaten hızlıdır boyutu ()..
— 472084

Bunu #foo yerine kullanmak istersem, nasıl kullanılır?
— Mukesh

@ 472084 Bunu bu şekilde yaparsanız, "span" öğesini de sayar. Sorunun, tüm öğeleri değil, yalnızca "div" öğelerini saymak istediğini nasıl belirttiğine dikkat edin.
— Angel Blanco

68

Kullanmanızı öneririm $('#foo').children().size() iyi performans için .

Ben oluşturduk jsperf hız farkını görmek için testi children()en azından tarafından çocuk seçici dayak yöntemi (#foo> div) yaklaşımını % 60 Chrome'da (kanarya inşa v15) 20-30% Firefox'ta (v4) .

Bu arada, söylemeye gerek yok, bu iki yaklaşım aynı sonuçları üretir (bu durumda, 1000).

[Güncelleme] Boyutu () ve uzunluk testini içerecek şekilde testi güncelledim ve çok fazla fark yaratmıyorlar (sonuç: lengthkullanım biraz daha hızlı (% 2) size())

[Güncelleme] nedeniyle OP görülen yanlış biçimlendirme için (bana göre 'biçimlendirme Validated' güncelleme öncesi), hem $("#foo > div").length& $('#foo').children().lengthaynı (sonuçlanmıştır jsfiddle ). Ancak SADECE 'div' çocukları elde etmek için doğru cevap için, doğru ve daha iyi performans için çocuk seçiciyi KULLANMALIDIR


Bu soru bir süre önce
— sorulsa da

Sadece 'div' çocukları filtrelemek nerede?
— Andrey Tserkus

2
.lengthaslında bir işlev çağrısının ek yükü olmadığından tercih edilen yöntemdir.
— Nic Aitch

Evet, alt seçici doğru çünkü yerel CSS seçicileri kullanıyor, bu yüzden seçim JavaScript yerine C ++ ile yazılmış ... Oldukça performans farkı. Bu cevabı anlamak daha kolay ama çok daha yavaş.
— mdenton8

@manikanta Hey, çok detaylı cevap. Rahatsız ettiğim için üzgünüm, bir soru. $('#extraLinks').children().size()Bir div (ekstraLinks adlı) metin kutuları saymak isterseniz ben neden 4sadece 2 olduğunda olsun . Genel olarak, uzunluğu 2 ile çarpılır olsun ... Neden herhangi bir fikir? Teşekkürler
— slevin

25
$("#foo > div") 

#foo öğesinin hemen torunları olan tüm div'leri seçer
, çocuk setiniz varsa size boyut işlevini kullanabilirsiniz:

$("#foo > div").size()

ya da kullanabilirsiniz

$("#foo > div").length

Her ikisi de size aynı sonucu döndürür



8

MrCoders jsperf kullanarak yanıt olarak neden sadece dom düğümü kullanmıyorsunuz?

var $foo = $('#foo');
var count = $foo[0].childElementCount

Testi burada deneyebilirsiniz: http://jsperf.com/jquery-child-ele-size/7

Bu yöntem 46.095 op / s alırken, diğer yöntemler en iyi 2000 op / s alır


2
OP sadece div alt öğeleri istedi
— dj18



5
var divss = 0;
$(function(){
   $("#foo div").each(function(){
    divss++;

   });
   console.log(divss);  
});     
<div id="foo">
  <div id="bar" class="1"></div>
  <div id="baz" class="1"></div>
  <div id="bam" class="1"></div>
</div>

3

Jquery'nin en son sürümü ile kullanabilirsiniz $("#superpics div").children().length.


2
var n_numTabs = $("#superpics div").size();

veya

var n_numTabs = $("#superpics div").length;

Daha önce de söylendiği gibi, her ikisi de aynı sonucu verir.
Ancak size () işlevi daha fazla jQuery "PC" dir.
Sayfamla benzer bir sorun yaşadım.
Şimdilik,> işaretini atlayın ve iyi çalışmalıdır.


Descendant Selector, #superpics'in tüm torunları, çocuk, torun, büyük torun vb. Dahil olmak üzere, bu öğenin sadece hemen çocukları değil, tüm torunlarını döndürür
— manikanta

daha fazla jQuery "PC". anlamına geliyor ?
— Ghanshyam Lakhani


-1

Div türündeki hemen alt öğeler için bunu deneyin

$("#foo > div")[0].children.length
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.