0

div のコンテンツの 1 つを置き換えようとしています:

  $html = new DOMDocument();
    $html->loadHTML($content);

    $elements = $html->getElementsByTagName('div');
    foreach($elements as $element){
      if($element->getAttribute('name') == "left_0"){
       $element->nodeValue = "<h2>Title</h2>";
     }

echo $html-> saveHTML(); 

index.php で次の出力が得られます。

<h2>Title</h2>

答えを探していましたが、それを修正する方法が見つかりません。ありがとう!

4

2 に答える 2

1

ループ内で次のように変更します。

foreach($elements as $element) {
    if ($element->getAttribute('name') == "left_0") {
        $element->nodeValue = null;// removing the text inside the parent element
        $h2 = new \DOMElement('h2', 'Title');// create a new h2 element
        $element->appendChild($h2);// appending the new h2 to the parent element
    }
}

ネストされた HTML 要素を作成する場合は、DOMElement子と親ごとに new を作成し、各子をその親に追加することで、最後の子から上に進みます。例えば:

<div><h2>H2<h2/></div>

これをループ内に配置します。

$parentDiv = new \DOMElement('div', null);// the outer div
$childH2 = new \DOMElement('h2', 'H2');// the inner h2 tag
$parentDiv->appendChild($childH2); // append the h2 to div
$element->appendChild($parentDiv); // append the div with its children to the element

ええ、出力するときは を使用する必要があります$html->saveHTML()

お役に立てれば。

于 2016-06-26T08:10:29.117 に答える
0

のような内容のタグでは<h2>Tom</h2>Tomは でありnodeValueh2nodeNameです。

への書き込みはできませんnodeName。新しいノードを作成するには、これを使用する必要があります。

$html = new DOMDocument();
$html->loadHTML($content);

$elements = $html->getElementsByTagName('div');
foreach($elements as $element) {
  if ($element->getAttribute('name') == "left_0") {
    $newElement = $html->createElement('h2','Tom'); 
    $element->appendChild($newElement); 
}

ネストされたタグを追加する場合は、次のよう<p><h2>Title</h2></p>にします。

$paragraph = $html->createElement('p');         // create outer <p> tag
$currentElement->appendChild($paragraph);       // attach it to parent element
$heading2 = $html->createElement('h2','Title'); // create inner <h2> tag
$paragraph->appendChild($heading2);             // attach that to the <p> tag
于 2016-06-26T08:03:16.550 に答える