如何使用DOMDocument insertBefore

时间:2014-01-28 20:35:54

标签: php domdocument appendchild createelement

我有一个div,我试图在已经存在于div中的现有h3和p元素之前将div元素(h3和p)插入到div中。 insertBefore(http://www.php.net/manual/en/domnode.insertbefore.php)的PHP文档说明这正是应该发生的事情,但它不是在现有元素之前插入,而是替换我'content'div中的所有现有元素。

这是我的代码:

$webpage = new DOMDocument();
$webpage->loadHTMLFile("news.html");

$headerelement = $webpage->createElement('h3', $posttitle);
$pelement = $webpage->createElement('p', $bodytext);

$webpage->formatOutput = true;
$webpage->getElementById('content')->insertBefore($headerelement);
$webpage->getElementById('content')->insertBefore($pelement);

$webpage->saveHTMLFile("newpost.html");

我确定我只是不理解某些东西......任何帮助都会受到赞赏,谢谢。

1 个答案:

答案 0 :(得分:2)

这是因为您没有指定插入节点之前应该插入的引用节点。可以这样想:

$whatTheElementIsInsertedInto->insertBefore($theElement, $whatItIsInsertedBefore)

<强> Live demo (click).

$dom = new DOMDocument();

$dom->loadHtml('
  <html><head></head>
    <body>
      <div id="content">
        <h3>Original h3</h3>
      </div>
    </body>
  </html>
');

//find the "content" div
$content = $dom->getElementById('content');

//find the first h3 tag in "content"
$origH3 = $content->getElementsByTagName('h3')->item(0);

//create a new h3
$newH3 = $dom->createElement('h3', 'new h3!');

//insert the new h3 before the original h3 of "content"
$content->insertBefore($newH3, $origH3);

echo $dom->saveHTML();