在PHP中将DOM元素包装到另一个DOM元素中

在PHP中将DOM元素包装到另一个DOM元素中,php,html,dom,Php,Html,Dom,我最初使用Regex问了一个关于这些问题的问题,但被建议改为使用PHPDOM库。。。这是优越的,但我仍然坚持 基本上,我想包装为什么要费心重新创建节点?为什么不直接替换节点呢?(如果我明白你想做什么) 编辑哎呀,看起来您正试图在span中的$tag下包装所有内容。。。请尝试以下方法: if($spancount == 0){ $element = $doc->createElement('span'); $element->setAttribute('style','

我最初使用Regex问了一个关于这些问题的问题,但被建议改为使用PHPDOM库。。。这是优越的,但我仍然坚持

基本上,我想包装
为什么要费心重新创建节点?为什么不直接替换节点呢?(如果我明白你想做什么)

编辑哎呀,看起来您正试图在span中的
$tag
下包装所有内容。。。请尝试以下方法:

if($spancount == 0){
    $element = $doc->createElement('span');
    $element->setAttribute('style','color:#ffffff;');
    foreach ($tag->childNodes as $child) {
        $tag->removeChild($child);
        $element->appendChild($child);
    }
    $tag->appendChild($child);
}
Edit2根据您的结果,foreach似乎没有完成,因为节点被删除。。。尝试用以下内容替换foreach:

while ($tag->childNodes->length > 0) {
    $child = $tag->childNodes->item(0);
    $tag->removeChild($child);
    $element->appendChild($child);
}

这是一个很好的信息,很抱歉来的这么晚,但我有一个错误。。。最后:

$tag->appendChild($child);
应该是

$tag->appendChild($element);

这是我能让它工作的唯一方法。

谢谢,这几乎很有效。请参见上面编辑的OP。对于带有
标记的链接,文本不会被包装在新的
中,而是被包装在
中。
if($spancount == 0){
    $element = $doc->createElement('span');
    $element->setAttribute('style','color:#ffffff;');
    $tag->parentNode->replaceChild($element, $tag);
    $element->apendChild($tag);
}
if($spancount == 0){
    $element = $doc->createElement('span');
    $element->setAttribute('style','color:#ffffff;');
    foreach ($tag->childNodes as $child) {
        $tag->removeChild($child);
        $element->appendChild($child);
    }
    $tag->appendChild($child);
}
while ($tag->childNodes->length > 0) {
    $child = $tag->childNodes->item(0);
    $tag->removeChild($child);
    $element->appendChild($child);
}
$tag->appendChild($child);
$tag->appendChild($element);