Diese if
Bedingung macht mir Probleme:
if (div id=myfav has children) {
do something
} else {
do something else
}
Ich habe Folgendes versucht:
if ( $('#myfav:hasChildren') ) { do something }
if ( $('#myfav').children() ) { do something }
if ( $('#myfav:empty') ) { do something }
if ( $('#myfav:not(:has(*))') ) { do something }
children().length
sollte anstelle von size () pro jQuery-Dokument hier aufgerufenDieses Snippet bestimmt mithilfe des
:parent
Selektors , ob das Element untergeordnete Elemente hat :Beachten Sie, dass
:parent
auch ein Element mit einem oder mehreren Textknoten als übergeordnetes Element betrachtet wird.Somit werden die
div
Elemente in<div>some text</div>
und<div><span>some text</span></div>
jeweils als Eltern betrachtet, sind jedoch<div></div>
keine Eltern.quelle
#myfav
und:parent
in Ihrem Beispiel entfernen , da sonst der Selektor nicht mit dem übereinstimmt, was meine Antwort liefern würde.Additional Notes: Because :parent is a jQuery extension and not part of the CSS specification, queries using :parent cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. To achieve the best performance when using :parent to select elements, first select the elements using a pure CSS selector, then use .filter(":parent").
Eine andere Option, nur zum Teufel, wäre:
Kann tatsächlich die schnellste sein, da ausschließlich die Sizzle-Engine verwendet wird und nicht unbedingt jede jQuery. Könnte aber falsch sein. Trotzdem funktioniert es.
quelle
Dafür gibt es eigentlich eine recht einfache native Methode:
Beachten Sie, dass dies auch einfache Textknoten umfasst, sodass dies für a gilt
<div>text</div>
.quelle
$(...)[0] is undefined
Dies kann passieren, wenn#myfav
es nicht gefunden wird. Ich würde die Existenz des ersten übereinstimmenden Elements testen, bevor ich diese Bedingung anwende, dh :$('#myfav')[0] && $('#myfav')[0].hasChildNodes()
.und wenn Sie überprüfen möchten, hat div ein bestimmtes Kind (sagen Sie
<p>
verwenden:quelle
Sie können auch überprüfen, ob div bestimmte Kinder hat oder nicht.
quelle
Der jQuery-Weg
In jQuery können Sie
$('#id').children().length > 0
testen, ob ein Element untergeordnete Elemente hat.Demo
Der Vanille JS Weg
Wenn Sie jQuery nicht verwenden möchten, können Sie
document.getElementById('id').children.length > 0
damit testen, ob ein Element untergeordnete Elemente hat.Demo
quelle