insert_before
Whitesnake
- php
Ich habe eine Frage zu insert_before in php.
Ich kann damit vor bestimmte Kindknoten eines Knotens einen Kindknoten einfügen. Sprich nehmen wir an ich hätte eine Aufstellung die so aussiehst:
<div>
<div id=1>irgendwas drin</div>
<div id=2>irgendwas drin</div>
<div id=3>irgendwas drin</div>
</div>
So und ich schick einer Datei die in diese Struktur vor dem div mit der id=3 ein andere div einschieben soll als Parameter die id vom id=2, dann kann ich ja nach diesem div suchen und im item eines weiterhochzählen um zum div mit der id=3 zu kommen.
Aber wie geht es dann weiter?
Ich habe in meinem Falle in das div, dass eingeschoben wird ein paar Sachen verschachtelt und sie alle mit appendChild an das div angehängt. Wie gehe ich jetzt vor, wenn ich beispielsweise diese div zwischen das div mit id 2 und id 3 einhängen will?
Hallo,
Ich habe in meinem Falle in das div, dass eingeschoben wird ein paar Sachen verschachtelt und sie alle mit appendChild an das div angehängt. Wie gehe ich jetzt vor, wenn ich beispielsweise diese div zwischen das div mit id 2 und id 3 einhängen will?
$div_node_23_parent->insertBefore($div_node_new,$div_node_23_parent->$div_node_3);
Hinweis: IDs nicht mit Ziffern beginnen.
MfG, Thomas
Ich habe jetzt folgendes gemacht:
@$doc=domDocument::loadHTMLFile($datei1);
$allediv=$doc->getElementsByTagName('div');
dann hab ich ein paar Elemente generiert etc. ihnen Attribute eingehängt etc.
$divtree->appendChild($tabletree);
$tabletree->appendChild($trtree);
$trtree->appendChild($tdtree); usw.
Sprich das $divtree soll dann später eingehängt werden.
for ($i=0; $i < $allediv->length; $i++) {
$divitems=$allediv->item($i);
if ($divitems->getAttribute('nummer') == $_POST['divid']) {
$i++;
$beforediv = $allediv->item($i);
$doc->getElementsByTagName('div')->item(0)->insertBefore($divtree, $beforediv);
}
}
Dabei krieg ich aber nur folgende Fehlermeldung:
Fatal error: Uncaught exception 'DOMException' with message 'Not Found Error' in postgenerator.php:182 Stack trace: #0 {main} thrown in postgenerator.php on line 182
Line 182 ist folgende:
$doc->getElementsByTagName('div')->item(0)->insertBefore($divtree, $beforediv);
Hallo,
Fatal error: Uncaught exception 'DOMException' with message 'Not Found Error' in postgenerator.php:182 Stack trace: #0 {main} thrown in postgenerator.php on line 182
Hier mal ein funktionierender Testcase mit DIVs:
<?php
$doc=new DOMDocument;
$div_haupt=$doc->createElement("div");
for($i=0;$i<3;$i++)
{
$div_unter=$doc->createElement("div");
$div_unter->appendChild($doc->createTextNode("Text".intval($i+1)));
$div_haupt->appendChild($div_unter);
}
$doc->appendChild($div_haupt);
$div_test=$doc->createElement("div");
$div_test->setAttribute("id","test");
$div_test->appendChild($doc->createTextNode("Knoten mit ID test"));
$div_knoten0=$doc->getElementsByTagName("div")->item(0);
$div_knoten3=$doc->getElementsByTagName("div")->item(3);
$div_knoten0->insertBefore($div_test,$div_knoten3);
print "<pre>".htmlentities($doc->saveHTML())."</pre>";
/* Ergebnis:
<div>
<div>Text1</div>
<div>Text2</div>
<div id="test">Knoten mit ID test</div>
<div>Text3</div>
</div>
*/
?>
MfG, Thomas