DOM leere Knoten löschen

Dummfisch

Grünschnabel
Hallo,
ich habe einen DOM-Baum mit folgender Struktur
<Hauptpunkt>
<Unterpunkt 1>​
<Unterpunkt 2>​
<Hauptpunkt>
<Hauptpunkt>
<Hauptpunkt>
<Unterpunkt 1>​
<Unterpunkt 2>​

Jetzt möchte ich aus diesem Baum alle Elemente entfernen, die keine Unterpunkte haben! Wie kann ich das machen?
Mein Hauptproblem ist im Moment, wie ich die zu löschenden Elemente identifiziere, da sich die Position ja sofort ändert, nachdem ein Element gelöscht wurde.

Vielleicht könnt ihr mir helfen

MfG
 
Ich habe jetzt diesen Ansatz versucht. Allerdings funktioniert das nicht ... wer kann mir helfen?

PHP:
foreach ($ps->childNodes as $kontrollkat) {
	if($kontrollkat->childNodes->length == 0) {
		$ps->removeChild($kontrollkat);
	}
}
 
Hi,

durchlaufe den Baum doch von hinten nach vorne. Dann sollten keine Probleme mit der Indizierung auftreten.
Ausserdem solltest du beachten, dass eine neue Zeile in einigen Browsern als Knoten (Textknoten)
betrachtet werden.
Code:
<html>
<head>
<title>www.tutorials.de</title>
<meta name="author" content="Quaese">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">
  <!--
function deletEmptyNodes(strID){
  // Baumobjekt
  var objTree = document.getElementById(strID);
  // Länge der Kindknoten
  var intLength = objTree.childNodes.length;

  // Kindknoten rückwärts durchlaufen
  for(var i=intLength-1; i>=0; i--){
    // Falls kein Kind existiert ODER genau ein Kind existiert, das ein Textknoten ist
    if((objTree.childNodes[i].childNodes.length == 0) ||
       ((objTree.childNodes[i].childNodes.length == 1) && (objTree.childNodes[i].firstChild.nodeType == 3))){
      // Knoten löschen
      objTree.removeChild(objTree.childNodes[i]);
    }
  }
}
 //-->
</script>
</head>
<body>
<button onclick="deletEmptyNodes('treeID');">deletEmptyNodes</button>
<ul id="treeID">
  <li>Li 1
    <ul><li>Li 1.1</li></ul>
  </li>
  <li>Li 2</li>
  <li>Li 3</li>
  <li>Li 4
    <ul><li>Li 4.1</li><li>Li 4.2</li></ul>
  </li>
  <li>Li 5</li>
</ul>
</body>
</html>
Vielleicht kannst du etwas damit anfangen.

Ciao
Quaese
 

Neue Beiträge

Zurück