根据DOMDocument::getElementsByTagName
的文档,我可以用"*"
参数调用该函数,并从某些HTML代码中获取所有HTML元素的列表。如何获取PHP中所有html元素的列表?
然而,用下面的代码:
<?php
$dom = new DOMDocument();
$dom->loadHTML("<html><body><div>hello</div><div>bye</div></body></html>");
$nodes = $dom->getElementsByTagName("*");
foreach ($nodes as $node) {
$new_text= new DOMText($node->textContent."MODIFIED");
$node->removeChild($node->firstChild);
$node->appendChild($new_text);
}
$content = $dom->saveHTML();
echo $content;
?>
我得到的只有一个元素的列表,上面的代码的执行结果是:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>hellobyeMODIFIED</html>
,而我希望的东西像这样:
<html><body><div>helloMODIFIED</div><div>byeMODIFIED</div></body></html>
不应该DOMDocument::getElementsByTagName
方法返回一个尽可能多的HTML元素在HTML代码中可用?
注:我需要显式创建DOMText实例,因为我需要这个在PHP 5.4中工作。 DOMNode::textContent
只能从PHP写入5.6
你的元素具有相同的标签名称... – Alexis
@Alexis,是的,但如果我的getElementsByTagName被改变的getElementsByTagName( “*”)( “分区”) ,那么我得到我想要的结果,并且这些元素仍然具有相同的标签名称。 –
@MarcosFernandez,你不清楚你到底想要达到什么目的。你想修改所有文本节点吗?还是要修改具有文本节点的叶子(最后一个标签)的所有文本节点?例如,这个序列应该如何修改'