到目前为止,您还没有显示任何代码,因此不清楚您运行的是哪个问题。我只能假设这是因为如果你迭代改变它的链接列表,迭代将失效。所以只有第一个元素被替换。
使用for
循环可以帮助在这里只获得每次迭代的第一个元素。它还允许初始化并增加替换中需要的数字的计数变量。
更换本身可以用replaceChild
轻松完成。环例如:
for($c = 1; $a = $doc->getElementsByTagName('a')->item(0); $c++) {
$a->parentNode->replaceChild(
$doc->createTextNode(sprintf("@@%[email protected]@", $c)),
$a
);
}
到$doc->getElementsByTagName('a')->item(0)
呼叫将如果没有这样的元素存在(再)返回NULL
。这是循环的退出条件。
完整的示例:
$html = '<html><body>
Lorum ipsum <a href="http://google.com">click here</a> dolores lorem.
Lorum ipsum <a href="http://stackoverflow.com">click here too</a> dolores lorem.
</body></html>';
$doc = new DOMDocument();
$doc->loadHtml($html);
for($c = 1; $a = $doc->getElementsByTagName('a')->item(0); $c++) {
$a->parentNode->replaceChild(
$doc->createTextNode(sprintf("@@%[email protected]@", $c)),
$a
);
}
echo $doc->saveHTML();
输出:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
Lorum ipsum @@[email protected]@ dolores lorem.
Lorum ipsum @@[email protected]@ dolores lorem.
</body></html>
我希望这是有帮助的。
用DOMText节点替换所有的DOME元素。 – Gordon