2017-04-11 17 views
0

これは私のHTMLコードです。<a>タグを<img>タグに置き換えて、DOMDocumentを使用したいと思います。ここで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として子ノードを返す関数であるが。

答えて

1

Hello_mate。

私はあなたを理解している場合だけでなく、あなたは<a>タグを削除したいと私は正確にあなたの関数cj_DOMinnerHTMLが何をしているかわからないが、私はあなたが間違っている最初の引数としてreplaceChild方法にDOMDocumentのインスタンスを渡していることがわかります。 documentationを参照すると、正確にreplaceChildが機能しています(DOMNodeの2つの引数を受け入れます)。とにかく私は<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()); 

OUTPUT

<!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> 

私はあなたのコードを理解し、あなたがあなたのニーズのために働くためにそれを修正することができます願っています。

幸運の友人!

+0

ありがとうございます。 $ link-> parentNode-> insertBefore($ img、$ link); $ link-> parentNode-> removeChild($ link);私はこのコードで私の問題を解決しました。私はあなたのコードを試してみます。 –

+0

コードメイトに感謝します。それはうまく動作します –

+0

あなたは歓迎です、これはあなたに役立ってうれしいです:) – codtex

関連する問題