【问题标题】:How to use DOMDocument insertBefore如何使用 DOMDocument insertBefore
【发布时间】:2014-02-20 09:10:21
【问题描述】:

我有一个 div,我正在尝试将几个元素(h3 和 p)插入到 div 中,位于已经存在于 div 中的现有 h3 和 p 元素之前。 insertBefore (http://www.php.net/manual/en/domnode.insertbefore.php) 的 PHP 文档说这正是应该发生的事情,但不是在现有元素之前插入,而是替换我的“内容”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");

我确定我只是不理解某些东西...任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 你尝试使用insertBefore的代码是什么?
  • 是的,对不起,我一直在交换 insertBefore 和 appendChild 试图让它工作。据我所知,他们做同样的事情。在上面的代码中,我猜我使用了 appendChild
  • 刚刚进行了编辑,以便其他阅读本文的人更清楚
  • 如果您感谢我的回答,请不要忘记单击答案左侧的复选标记表示感谢。这会将答案标记为“已接受”答案,即您认为最有帮助的答案。如果出现更好的答案,您可以切换到那个答案!

标签: php domdocument appendchild createelement


【解决方案1】:

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

$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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 2013-05-19
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多