<img>
HTMLのブロックをPHPのDOMDocumentに渡して、要素をインラインでリファクタリングしようとしています:http: //www.appelsiini.net/projects/lazyload
それぞれについて<img>
、リファクタリングされた複製を挿入しようとしています。次に、<noscript>
JS以外のフォールバックのタグで元の複製をラップします。
例:
入力:
<img src="img/example.jpg" width="640" heigh="480">
出力:
<img class="lazy" src="img/grey.gif" data-original="img/example.jpg" width="640" heigh="480"><noscript><img src="img/example.jpg" width="640" heigh="480"></noscript>
ラッピングが機能していて、新しい要素も正しく構成されています。問題は、2番目appendChild
(下)が機能せず、その理由がわからないことです。誰かが解決策を提供できますか?
私は次のコードを持っています:
$noScript = $dom->createElement('noscript');
$images = $dom->getElementsByTagName('img');
foreach ($images as $image) {
$src = $image->getAttribute('src');
$alt = $image->getAttribute('alt');
$title = $image->getAttribute('title');
$style = $image->getAttribute('style');
$newImage = $dom->createElement('img');
$newImage->setAttribute('class', 'lazy');
$newImage->setAttribute('data-original', $src);
$newImage->setAttribute('src', '/images/whitespace.gif');
if ($style) $newImage->setAttribute('style', $style);
if ($alt) $newImage->setAttribute('alt', $alt);
if ($title) $newImage->setAttribute('title', $title);
$noScriptClone = $noScript->cloneNode();
$image->parentNode->replaceChild($noScriptClone, $image);
$noScriptClone->appendChild($image);
$noScriptClone->parentNode->appendChild($newImage);
}
return $dom->saveHTMLExact();