所以我已经做了很长一段时间了,我得到的最好的是将图像包装在一个链接中,并在图像标签之后加上一个跨度:
<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 标签包裹在一个带有 span 标签的 a 标签中,并在 image 标签之前:
前
<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');
}
}