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()次に、別の DOMDocument オブジェクトを返す別の場所にある関数である which を呼び出します。

次に$oe、渡された html に最初に含まれていた要素があり、 $ne は、replaceHtml 呼び出しで作成された DOMDocument の要素です。$oeと交換したい$ne

次に、これらすべてのエコーがあります。最初のものは何$domから始めるべきかを示します。それは正しいです。

次に、元の要素 (置き換えたい要素) が表示されますが、これは正しいことです。ID が {{ALViewElement_.

次は、元の要素を置き換えたい要素を示しています。ID が ALViewElement で始まらないことを除いて、同じものであることに注意してください。いいえ、私はここで探しているものではないので、DOMDocument で id を非常に簡単に変更できるという答えを探しているわけではありません。

次の呼び出しでは、元の要素の parentNode が表示されます。これは単なる html フラグメントであり、実際にはparentNode はありません。これは自分自身を印刷します。{{ALViewElement_ id.

次に、replace child を呼び出します。

その後、次の 2 つのエコーでは何も出力されません。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 に答える