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