簡體   English   中英

用子節點PHP替換DOMDocument父節點

[英]Replace DOMDocument Parent node with child node PHP

這是我的HTML代碼,我想使用DOMDocument<a>標記替換為<img>標記。

<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返回的函數。

你好伙伴。

如果我很了解您,您想刪除<a>標記,但我不知道您的函數cj_DOMinnerHTML到底在做什么,但是我看到您將DOMDocument實例作為第一個參數傳遞給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());

輸出值

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html>
    <body>
        <div id="container"> 
            <img src="yyy.jpg"> 
            <img src="aaa.jpg"> 
            <img src="bbb.jpg"> 
            <img src="ccc.jpg"> 
            <img src="ddd.jpg"> 
            <img src="eee.jpg"> 
        </div>
    </body>
</html> 

希望您能理解該代碼,並能夠對其進行修改以適合您的需求。

祝你好運的朋友!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM