2017-04-11 3 views
0

이것은 내 HTML 코드이며 태그를 DOMDocument을 사용하여 <a> 태그로 대체하고 싶습니다.DOMDocument 부모 노드를 자식 노드로 바꿉니다 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 href='xxx.com'><img src='yyy.jpg'></a> 

PHP 코드입니다.

답변

1

Hello_mate.

내가 당신을 이해하면 잘은 <a> 태그를 제거 할 내가 정확히 기능 cj_DOMinnerHTML가 무엇을하고 있는지 모르겠지만, 난 당신이 잘못 첫 번째 인수로 replaceChild 방법 DOMDocument의 인스턴스를 전달하는 것을 알 수있다. documentation을 참조하여 정확히 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()); 

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