Hitung elemen div anak langsung menggunakan jQuery


180

Saya memiliki struktur simpul HTML berikut:

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

Bagaimana cara menghitung jumlah anak langsung dari foo, yang bertipe div? Pada contoh di atas, hasilnya harus dua ( bardan baz).


1
Saya telah menambahkan tes jsperf untuk melihat perbedaan kecepatan antara pendekatan yang berbeda. lihat jawaban saya di bawah
manikanta

Jawaban:


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

Arahkan anak-anak elemen dengan id 'foo' yang divs. Kemudian mengambil ukuran set terbungkus yang dihasilkan.


1
Saya hanya bertanya-tanya pada hari Jumat bagaimana cara menghitung kolom tabel dengan jQuery. Aku harus mencoba pendekatan yang sama: $('#table > th').size().
Jim Schubert

1
Kadang-kadang ini tidak berhasil dan Anda harus menggunakan $ ('# foo'). Children (). Size () yang lebih cepat menurut @mrCoder
472084

Jika saya ingin menggunakan ini daripada #foo lalu. Bagaimana cara menggunakan ini?
Mukesh

@ 472084 Jika kamu melakukannya dengan cara itu, itu akan menghitung elemen "span" juga. Perhatikan bagaimana pertanyaan menentukan dia ingin menghitung hanya elemen "div", tidak semua elemen.
Angel Blanco

68

Saya sarankan menggunakan $('#foo').children().size()untuk kinerja yang lebih baik.

Saya telah membuat tes jsperf untuk melihat perbedaan kecepatan dan children()metode yang mengalahkan pendekatan pemilih anak (#foo> div) oleh setidaknya 60% di Chrome (canary build v15) 20-30% di Firefox (v4).

Ngomong-ngomong, tak perlu dikatakan, kedua pendekatan ini menghasilkan hasil yang sama (dalam hal ini, 1000).

[Pembaruan] Saya telah memperbarui tes untuk menyertakan tes ukuran () vs panjang, dan mereka tidak membuat banyak perbedaan (hasil: lengthpenggunaan sedikit lebih cepat (2%) daripada size())

[Perbarui] Karena markup yang salah terlihat di OP (sebelum pembaruan 'markup divalidasi' oleh saya), keduanya $("#foo > div").length& $('#foo').children().lengthmenghasilkan hal yang sama ( jsfiddle ). Tetapi untuk jawaban yang benar untuk mendapatkan HANYA 'div' anak-anak, satu HARUS menggunakan pemilih anak untuk kinerja yang benar & lebih baik


meskipun pertanyaan ini ditanyakan kapan-kapan, hanya ingin berbagi sehingga ini bisa membantu seseorang mulai sekarang
manikanta

Di mana menyaring hanya anak-anak 'div' di sana?
Andrey Tserkus

2
.lengthsebenarnya metode yang disukai karena tidak memiliki overhead panggilan fungsi.
Nic Aitch

Ya, pemilih anak benar karena menggunakan pemilih CSS asli, jadi pilihannya ditulis dalam C ++ daripada JavaScript ... Cukup perbedaan kinerja. Jawaban ini lebih mudah dimengerti tetapi jauh lebih lambat.
mdenton8

@manikanta Hai, anser sangat detail. Maaf mengganggu, satu pertanyaan. Jika saya suka $('#extraLinks').children().size()menghitung kotak teks dalam div (bernama extraLinks) mengapa saya dapatkan 4ketika mereka hanya 2. Secara umum, saya mendapatkan panjangnya dikalikan dengan 2 ... Ada yang tahu kenapa? Terima kasih
slevin

25
$("#foo > div") 

memilih semua divs yang merupakan keturunan langsung dari #foo
setelah Anda memiliki anak-anak, Anda dapat menggunakan fungsi ukuran:

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

atau bisa kamu gunakan

$("#foo > div").length

Keduanya akan mengembalikan hasil yang sama kepada Anda



8

Menanggapi jawaban mrCoders menggunakan jsperf mengapa tidak menggunakan dom node?

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

Anda dapat mencoba tes di sini: http://jsperf.com/jquery-child-ele-size/7

Metode ini mendapat 46.095 op / s sedangkan metode lain terbaik 2000 op / s


2
OP hanya meminta elemen div anak
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

Dengan versi jquery terbaru, Anda dapat menggunakan $("#superpics div").children().length.


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

atau

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

Seperti yang sudah dikatakan, keduanya mengembalikan hasil yang sama.
Tetapi fungsi size () lebih jQuery "PC".
Saya memiliki masalah yang sama dengan halaman saya.
Untuk saat ini, abaikan saja> dan itu akan berfungsi dengan baik.


Selector Descendant akan mengembalikan semua keturunan #superpics, termasuk anak, cucu, cicit, dan sebagainya, dari elemen itu, bukan hanya anak
manikanta

lebih banyak jQuery "PC". artinya?
Ghanshyam Lakhani


-1

Coba ini untuk elemen anak langsung dari tipe div

$("#foo > div")[0].children.length
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.