PHP DOMDocument:insertBefore,如何使其工作?
我想在给定元素之前放置一个新的节点元素。我正在使用insertBefore,但没有成功 这是密码PHP DOMDocument:insertBefore,如何使其工作?,php,domdocument,Php,Domdocument,我想在给定元素之前放置一个新的节点元素。我正在使用insertBefore,但没有成功 这是密码 <DIV id="maindiv"> <!-- I would like to place the new element here --> <DIV id="child1"> <IMG /> <SPAN /> </DIV> <DIV id="child2"> <IMG /
<DIV id="maindiv">
<!-- I would like to place the new element here -->
<DIV id="child1">
<IMG />
<SPAN />
</DIV>
<DIV id="child2">
<IMG />
<SPAN />
</DIV>
/$div是一个新的div节点元素,
//我正在尝试的代码如下所示:
$maindiv->item(0)->parentNode->insertBefore($div$maindiv->item(0));
//Obs:这段代码实际上将新节点放在maindiv之前
//$maindiv对象(DOMNodeList)[5],来自getElementsByTagName('div')
//echo$maindiv->item(0)->nodeName给出'div'
//echo$maindiv->item(0)->nodeValue提供该div“一些随机文本”的正确数据
//在找到解决方案之前,此代码实际上会放置新的$div元素
$child = $maindiv->item(0);
$child->insertBefore( $div, $child->firstChild );
我不知道这有多大意义,但很好,它起了作用。从零开始,这似乎也起了作用:
$str = '<DIV id="maindiv">Here is text<DIV id="child1"><IMG /><SPAN /></DIV><DIV id="child2"><IMG /><SPAN /></DIV></DIV>';
$doc = new DOMDocument();
$doc->loadHTML($str);
$divs = $doc->getElementsByTagName("div");
$divs->item(0)->appendChild($doc->createElement("div", "here is some content"));
print_r($divs->item(0)->nodeValue);
$str='这里是文本';
$doc=新的DOMDocument();
$doc->loadHTML($str);
$divs=$doc->getElementsByTagName(“div”);
$divs->item(0)->appendChild($doc->createElement(“div”,“这里有一些内容”);
打印($divs->item(0)->nodeValue);
如果maindiv来自getElementsByTagName()
,则$maindiv->item(0)
是id=maindiv的div。因此,您的代码工作正常,因为您要求它将新div放在maindiv之前
要使其按您所希望的方式工作,您需要获得maindiv的孩子:
$dom = new DOMDocument();
$dom->load($yoursrc);
$maindiv = $dom->getElementById('maindiv');
$items = $maindiv->getElementsByTagName('DIV');
$items->item(0)->parentNode->insertBefore($div, $items->item(0));
请注意,如果没有DTD,PHP不会返回带有getElementsById的任何内容。要使getElementsById正常工作,您需要有DTD或指定哪些属性是ID:
foreach ($dom->getElementsByTagName('DIV') as $node) {
$node->setIdAttribute('id', true);
}
请看我的答案,谢谢!你们让我看得更清楚错误在哪里。非常感谢!你们让我更清楚地看到错误在哪里。
foreach ($dom->getElementsByTagName('DIV') as $node) {
$node->setIdAttribute('id', true);
}