Einfache Frage, ich habe ein Element, über das ich greife .getElementById ()
. Wie überprüfe ich, ob Kinder vorhanden sind?
quelle
Einfache Frage, ich habe ein Element, über das ich greife .getElementById ()
. Wie überprüfe ich, ob Kinder vorhanden sind?
Ein paar Möglichkeiten:
if (element.firstChild) {
// It has at least one
}
oder die hasChildNodes()
Funktion:
if (element.hasChildNodes()) {
// It has at least one
}
oder das length
Eigentum von childNodes
:
if (element.childNodes.length > 0) { // Or just `if (element.childNodes.length)`
// It has at least one
}
Wenn Sie nur über untergeordnete Elemente (im Gegensatz zu Textknoten, Attributknoten usw.) in allen modernen Browsern (und IE8 - sogar IE6) wissen möchten, können Sie dies tun: (Danke, Florian !)
if (element.children.length > 0) { // Or just `if (element.children.length)`
// It has at least one element as a child
}
Das beruht auf der children
Eigenschaft, die nicht in definiert wurde DOM1 , DOM2 , oder DOM3 , aber das hat nahezu universelle Unterstützung. (Es funktioniert in IE6 und höher sowie in Chrome, Firefox und Opera mindestens im November 2012, als dies ursprünglich geschrieben wurde.) Wenn Sie ältere mobile Geräte unterstützen, überprüfen Sie die Unterstützung.
Wenn Sie IE8 und frühere Unterstützung nicht benötigen, können Sie dies auch tun:
if (element.firstElementChild) {
// It has at least one element as a child
}
Das hängt davon ab firstElementChild
. Wie children
war es auch nicht in DOM1-3 definiert, aber anders als children
es nicht zu IE bis IE9 aufgenommen.
Wenn Sie sich an etwas halten möchten, das in DOM1 definiert ist (möglicherweise müssen Sie wirklich undurchsichtige Browser unterstützen), müssen Sie mehr Arbeit leisten:
var hasChildElements, child;
hasChildElements = false;
for (child = element.firstChild; child; child = child.nextSibling) {
if (child.nodeType == 1) { // 1 == Element
hasChildElements = true;
break;
}
}
All dies ist Teil von DOM1 und wird nahezu universell unterstützt.
Es wäre einfach, dies in eine Funktion zu packen, z.
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
nur in DOM4 hinzugefügt wurde. Da ich wusste, dass es in jedem bekannten Browser unterstützt wird, dachte ich, dass dies so ziemlich DOM0 / 1 ist.div
Elementdiv
eine bestimmte Klasse hatxyz
?for (child = element.firstChild; child; child = child.nextSibling )
, abgestimmt. Danke TJelement.firstChild
, nicht zu sein,null
wenn eselement.children.length
ist0
:firstChild
und solche beziehen sich auf Knoten, einschließlich Elemente, Textknoten, Kommentarnotizen usw.;children
ist nur eine Liste von Elementkindern . In modernen Browsern können SiefirstElementChild
stattdessen verwenden.Wie slashnick & bobince erwähnen,
hasChildNodes()
wird true für Whitespace ( Textknoten ) zurückgegeben. Ich wollte dieses Verhalten jedoch nicht und das hat bei mir funktioniert :)Bearbeiten : Für die gleiche Funktionalität ist dies eine bessere Lösung:
children[]
ist eine Teilmenge vonchildNodes[]
, die nur Elemente enthält.Kompatibilität
quelle
Sie können überprüfen, ob das Element untergeordnete Knoten hat
element.hasChildNodes()
. Beachten Sie, dass dies in Mozilla true zurückgibt, wenn nach dem Tag ein Leerzeichen steht, sodass Sie den Tag-Typ überprüfen müssen.https://developer.mozilla.org/En/DOM/Node.hasChildNodes
quelle
Sie können auch Folgendes tun:
Hierbei wird die Methode trim () verwendet, um leere Elemente, die nur Leerzeichen enthalten (in diesem Fall wird
hasChildNodes
true zurückgegeben), als leer zu behandeln.JSBin Demo
quelle
Spät, aber Dokumentfragment könnte ein Knoten sein:
Siehe:
https://github.com/k-gun/so/blob/master/so.dom.js#L42
https://github.com/k-gun/so/blob/master/so.dom.js # L741
quelle
Probieren Sie die childElementCount-Eigenschaft aus :
quelle
Eine wiederverwendbare
isEmpty( <selector> )
Funktion.Sie können es auch für eine Sammlung von Elementen ausführen (siehe Beispiel).
true
Gibt zurück (und beendet die Schleife), sobald ein Element neben Leerzeichen oder Zeilenumbrüchen Inhalte enthält.quelle
quelle