这是我的HTML代码,我想使用<a>
将<img>
代码替换为DOMDocument
代码。
<a href='xxx.com'><img src='yyy.jpg'></a>
以下是PHP
代码:
$newNode=cj_DOMinnerHTML($link); //$link refer to anchor tag
$image_dom = new DOMDocument();
$image_dom->loadHTML($newNode);
$link->parentNode->replaceChild($image_dom, $link); //this replace making my parent node empty
cj_DOMinnerHTML
是将子节点作为HTML返回的函数。
答案 0 :(得分:1)
Hello_ mate。
如果我理解你很好,你想删除<a>
标签而我不知道你的函数cj_DOMinnerHTML
到底在做什么,但我看到你正在传递{{{}的实例1}}到DOMDocument
方法作为第一个参数是错误的。请参阅documentation,了解replaceChild
究竟是如何工作的(它接受replaceChild
类型的两个参数)。无论如何,我给你一个替换DOMNode
标签的代码片段。请阅读我在代码中添加的注释,并尝试更改用例的代码。
<a>
<强>输出强>
$html = '
<div id="container">
<a href="xxx.com"><img src="yyy.jpg"></a>
<a href="aaa.com"><img src="aaa.jpg"></a>
<a href="bbb.com"><img src="bbb.jpg"></a>
<a href="ccc.com"><img src="ccc.jpg"></a>
<a href="ddd.com"><img src="ddd.jpg"></a>
<a href="eee.com"><img src="eee.jpg"></a>
</div>';
// load the dom document
$dom = new \DOMDocument();
if (!$dom->loadHTML($html)) {
echo '<h2>Error handle this ...</h2>';
}
// instantiate DOMXPath object
$finder = new \DOMXPath($dom);
// get all <a> tags of element that has id="container"
$anchors = $finder->query("//*[contains(concat(' ', normalize-space(@id), ' '), 'container')]/descendant::a");
// loop through all <a>
foreach ($anchors as $a) {
$parent = $a->parentNode;
// the following row of code will actually remove the <a> tag
$parent->replaceChild($a->childNodes->item(0), $a);
}
// show output
echo htmlspecialchars($dom->saveHTML());
我希望您能理解代码,并且您将能够修改它以满足您的需求。
祝你好运的朋友!