1

我无法使这种方法起作用。

我有这个 PHP 代码:

        $dom = new \DOMDocument();
        $dom->loadHTML($this->_html);

        $newD = $viewElement->replaceHtml();


        $oe = $dom->getElementById("{{ALViewElement_resume}}");
        $ne = $newD->getElementById("resume");


        echo $dom->saveHTML();
        echo $dom->saveHTML($oe);
        echo $newD->saveHTML($ne);
        echo $dom->saveHtml($oe->parentNode);
        $oe->parentNode->replaceChild($ne, $oe);

        echo $dom->saveHTML($ne);
        echo $dom->saveHTML();

所以我创建了一个 DOMDocument,并加载了一些 html。然后我调用$viewElement->replaceHtml()which 是我在其他地方的一个函数,它返回另一个 DOMDocument 对象。

然后$oe是我最初在传入的 html 中的元素,而 $ne 是在我的 replaceHtml 调用中创建的 DOMDocument 中的元素。我想替换$oe$ne.

然后我有所有这些回声。第一个将显示从什么$dom开始,这是正确的。

下一个将向您展示原始元素(我要替换的元素),这是正确的。注意 id 以 {{ALViewElement_.

接下来向您展示我想要替换原始元素的元素。请注意,除了 id 不是以 ALViewElement 开头之外,它就像是一样的东西。不,我不是在寻找说我可以很容易地用 DOMDocument 更改 id 的答案,因为这不是我在这里寻找的。

下一个调用显示原始元素的 parentNode。它只是一个 html 片段,所以实际上没有 parentNode。这会打印出来。注意 {{ALViewElement_ id。

然后我打电话给替换孩子。

然后接下来的两个回声什么也不打印。replaceChild 没有用,我失去了一切。

为什么这不起作用?我错过了什么?

编辑:忘记了 HTML。

我把它们放在一个 jsFiddle 中,所以很容易看到:https ://jsfiddle.net/jDPTC/

4

1 回答 1

1

你应该先克隆你的新节点,例如

$oe->parentNode->replaceChild($ne->cloneNode(true), $oe);

https://www.php.net/manual/en/domnode.clonenode.php

于 2013-09-25T15:15:26.773 回答