2016-08-05 15 views
1

Eine Menge von .cell Elemente werden dem DOM beim Laden von Dokumenten hinzugefügt. Nur einige von ihnen werden benötigt. Wenn in ihnen auch ein erstellt wurde, werden sie benötigt. Wenn innerhalb der .cell Elemente kein -Element erstellt wurde, löschen Sie das gesamte Element .cell. Wenn die erstellt wurde dann nichts tun.Delete DOM generated elements ohne <img> innerhalb

Wie kann ich das tun?

<div class="cell"> 
    <div class="a-class"> 
     <div class="always-generated-div"></div> 
     <img> <!-- if generated ---> 
    </div> 
</div> 
jq(".cell img").each(function() { 
    if (jq(this).length > 0) { 
     console.log("Oh There You Are"); 
    } else { 
     console.log("Empty elements erased"); 
     jq(".cell").remove(); 
    } 
}); 
+2

Warum Sie diese Bedingung stellen, wenn (jq (this) .length> 0) ??? Es wird immer wahr sein. –

Antwort

3

Sie können ein Elternteil durch ihre untergeordneten Elemente wählen Sie die :has() Wähler (und die :not() Wähler auch in diesem Fall) verwendet wird. Von dort können Sie remove() sie. Versuchen Sie folgendes:

$('.cell:not(:has(img))').remove(); 

Working example

+0

Warum nicht die 'not()' jQuery-Methode verwenden? –

+0

Weil ': not' auf dem Elternteil funktioniert, schaut es nicht auf die Kinder, vorausgesetzt, Sie meinen * nur * benutzen' nicht() '. Wenn Sie meinen, die 'not()' Methode mit dem ': has()' Selektor zu benutzen, dann würde das auch funktionieren, das hält alles in einem Selektor. –

+0

Kann es nicht zur Arbeit bringen. Ein bisschen HTML hinzugefügt. –

1

können Sie :empty Selektor

alle Elemente auswählen verwenden, die keine Kinder (einschließlich Textknoten) haben.

jq(".cell:empty").remove()