根據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,你不清楚你到底想要達到什麼目的。你想修改所有文本節點嗎?還是要修改具有文本節點的葉子(最後一個標籤)的所有文本節點?例如,這個序列應該如何修改'