だから私はかなり長い間これに取り組んできましたが、私が得た最良の方法は、画像をリンクでラップし、画像タグの後にスパンを付けることです:
<a href="">
<img src="">
<span></span>
</a>
しかし、私が欲しいのは:
<a href="">
<span></span>
<img src="">
</a>
あらゆる種類のバリエーションと位置を試しました
$img->parentNode->appendChild($dom->createElement('span'), $img);
私のコードのあらゆる種類の場所での insertBefore() の使用と、私はphp DOMのものにかなり慣れていないので、完全にアイデアがありません。私の情報源:
foreach($dom->getElementsByTagName('img') as $img)
{
$fancyHref = $dom->createElement('a');
$clone = $fancyHref->cloneNode();
$img->parentNode->replaceChild($clone, $img);
$clone->appendChild($img);
$img->parentNode->appendChild($dom->createElement('span'));
};
更新: 私の目標を明確にするために: HTML に img タグがあります。php dom を通過した後、img タグを a タグでラップし、image タグの前に span タグを付けます。
前
<img src="" />
後
<a href="">
<span class=""></span>
<img src="" />
</a>
これを行うための現時点での私のコード(スパンなし)
foreach($dom->getElementsByTagName('img') as $img)
{
$src = $img->getAttribute('src');
$filename = substr(strrchr($src , '/') ,1);
$filename = preg_replace('/^[.]*/', '', $filename);
$filename = explode('.', $filename);
$filename = $filename[0];
if($this->imagesTitles[$this->currentLanguage][$filename] !== '')
{
$img->setAttribute('title', $this->imagesTitles[$this->currentLanguage][$filename]);
$img->setAttribute('alt', $this->imagesTitles[$this->currentLanguage][$filename]);
}
else
{
$img->removeAttribute('title');
$img->removeAttribute('alt');
}
$classes = explode(' ', $img->getAttribute('class'));
if(!in_array('no-enlarge', $classes))
{
$fancyHref = $dom->createElement('a');
$span = $dom->createElement('span');
$span->setAttribute('class', 'magnifier');
$fancyHref->setAttribute('class', 'enlarge');
$fancyHref->setAttribute('rel', 'enlarge');
$fancyHref->setAttribute('href', $img->getAttribute('src'));
if($img->getAttribute('title') !== '')
{
$fancyHref->setAttribute('title', $img->getAttribute('title'));
$fancyHref->setAttribute('alt', $img->getAttribute('title'));
}
$clone = $fancyHref->cloneNode();
$img->parentNode->replaceChild($clone, $img);
$clone->appendChild($img);
$img->parentNode->insertBefore($span, $img);
}
$img->setAttribute('class', trim(str_replace('no-enlarge', '', $img->getAttribute('class'))));
if($img->getAttribute('class') === '')
{
$img->removeAttribute('class');
}
}