Pertanyaan sederhana, saya memiliki elemen yang saya ambil .getElementById ()
. Bagaimana cara memeriksa apakah ada anak?
sumber
Pertanyaan sederhana, saya memiliki elemen yang saya ambil .getElementById ()
. Bagaimana cara memeriksa apakah ada anak?
Beberapa cara:
if (element.firstChild) {
// It has at least one
}
atau hasChildNodes()
fungsinya:
if (element.hasChildNodes()) {
// It has at least one
}
atau length
properti dari childNodes
:
if (element.childNodes.length > 0) { // Or just `if (element.childNodes.length)`
// It has at least one
}
Jika Anda hanya ingin tahu tentang elemen anak (sebagai lawan dari node teks, node atribut, dll.) Pada semua browser modern (dan IE8 - bahkan IE6) Anda dapat melakukan ini: (terima kasih Florian !)
if (element.children.length > 0) { // Or just `if (element.children.length)`
// It has at least one element as a child
}
Itu bergantung pada children
properti, yang tidak ditentukan di DOM1 , DOM2 , atau DOM3 , tetapi memiliki dukungan yang hampir universal. (Ini berfungsi di IE6 dan yang lebih baru serta Chrome, Firefox, dan Opera setidaknya sejak November 2012, saat ini pertama kali ditulis.) Jika mendukung perangkat seluler lama, pastikan untuk memeriksa dukungan.
Jika Anda tidak membutuhkan IE8 dan dukungan sebelumnya, Anda juga dapat melakukan ini:
if (element.firstElementChild) {
// It has at least one element as a child
}
Itu bergantung firstElementChild
. Seperti children
, itu tidak didefinisikan di DOM1-3, tetapi tidak seperti children
itu tidak ditambahkan ke IE hingga IE9.
Jika Anda ingin tetap menggunakan sesuatu yang didefinisikan di DOM1 (mungkin Anda harus mendukung browser yang benar-benar tidak dikenal), Anda harus melakukan lebih banyak pekerjaan:
var hasChildElements, child;
hasChildElements = false;
for (child = element.firstChild; child; child = child.nextSibling) {
if (child.nodeType == 1) { // 1 == Element
hasChildElements = true;
break;
}
}
Semua itu adalah bagian dari DOM1 , dan hampir didukung secara universal.
Ini akan mudah untuk membungkusnya dalam sebuah fungsi, misalnya:
function hasChildElement(elm) {
var child, rv;
if (elm.children) {
// Supports `children`
rv = elm.children.length !== 0;
} else {
// The hard way...
rv = false;
for (child = element.firstChild; !rv && child; child = child.nextSibling) {
if (child.nodeType == 1) { // 1 == Element
rv = true;
}
}
}
return rv;
}
children
hanya ditambahkan di DOM4. Mengetahui itu didukung di browser yang dikenal, saya pikir ini cukup banyak DOM0 / 1.div
elemen yangdiv
memiliki kelas tertentu katakanxyz
?for (child = element.firstChild; child; child = child.nextSibling )
, memilih. Terima kasih TJelement.firstChild
menjadi non-null
whenelement.children.length
is0
:firstChild
dan semacam itu terkait dengan node termasuk elemen, node teks, catatan komentar, dll .;children
adalah murni daftar anak elemen . Di browser modern, Anda dapat menggunakanfirstElementChild
sebagai gantinya.Seperti slashnick & bobince mention,
hasChildNodes()
akan mengembalikan nilai true untuk whitespace (node teks). Namun, saya tidak menginginkan perilaku ini, dan ini berhasil untuk saya :)Sunting : untuk fungsionalitas yang sama, ini adalah solusi yang lebih baik:
children[]
adalah bagian darichildNodes[]
, yang hanya berisi elemen.Kesesuaian
sumber
Anda dapat memeriksa apakah elemen tersebut memiliki node turunan
element.hasChildNodes()
. Hati-hati di Mozilla ini akan mengembalikan nilai true jika spasi kosong setelah tag sehingga Anda perlu memverifikasi jenis tag.https://developer.mozilla.org/En/DOM/Node.hasChildNodes
sumber
Anda juga bisa melakukan hal berikut:
Ini menggunakan metode trim () untuk menangani elemen kosong yang hanya memiliki spasi putih (dalam hal ini
hasChildNodes
mengembalikan nilai true) sebagai kosong.Demo JSBin
sumber
Fragmen dokumen terlambat tetapi bisa menjadi node:
Lihat:
https://github.com/k-gun/so/blob/master/so.dom.js#L42
https://github.com/k-gun/so/blob/master/so.dom.js # L741
sumber
Coba properti childElementCount :
sumber
isEmpty( <selector> )
Fungsi yang dapat digunakan kembali .Anda juga dapat menjalankannya ke kumpulan elemen (lihat contoh)
mengembalikan
true
(dan keluar dari loop) segera satu elemen memiliki jenis konten apa pun di samping spasi atau baris baru.sumber
sumber