PHP DomDocument replaceChild

时间:2013-06-20 00:30:46

标签: php dom replace children

我无法使用此方法。

我有这个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()这是我在其他地方返回另一个DomDocument对象的函数。

然后$ oe是我在html中传递的元素,$ ne是在我的replaceHtml调用中创建的DomDocument中的元素。我想用$ ne替换$ o。

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

下一个将显示原始元素(我要替换的元素),这是正确的。请注意,id以{{ALViewElement _。

开头

接下来将向您展示我想要用原始元素替换的元素。请注意它是相同的,除了id不以ALViewElement开头。 不,我不是在寻找答案,说我可以很容易地用DomDocument更改id,因为那不是我在这里寻找的。 < / p>

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

然后我调用替换孩子。

然后接下来的两个回声什么都没打印出来。 replaceChild没有工作,我失去了一切。

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

编辑:忘记了HTML。

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

1 个答案:

答案 0 :(得分:1)

您应首先克隆新节点,例如

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

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