개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.03.30 22:08

DOMDocumentFragment::append 사용법에 대한 질문

목록
  • 컴파일러수집가 2일 전 2025.03.30 22:08
  • 2
    1
제가 DOMDocumentFragment::append 메소드를 사용하여 노드를 추가하려고 하는데, 다음과 같은 코드가 있습니다.

php

$doc = new DOMDocument();

$fragment = $doc->createDocumentFragment();



// 노드 추가

$fragment->append($doc->createElement('div'));

$fragment->append($doc->createElement('p'));



// 노드 추가 후 결과 확인

echo $doc->saveHTML();



이 코드는 노드를 추가하는 데 성공적으로 작동합니다. 하지만, 만약 노드가 이미 존재하는 경우, append 메소드는 기존 노드를 삭제하고 새로운 노드를 추가합니다. 이 경우 기존 노드가 삭제되는 것을 원치 않는다는 점에서 문제가 됩니다.

이 문제를 해결하기 위해, append 메소드의 동작을 변경하는 방법이 있을까요? 또는, 다른 방법으로 노드를 추가하는 방법이 있을까요?

    댓글목록

    profile_image
    나우호스팅  2일 전



    DOMDocumentFragment::append 메소드는 기존 노드를 삭제하고 새로운 노드를 추가하는 동작을 합니다. 이 문제를 해결하기 위해 다음 방법을 사용할 수 있습니다.

    1. 노드를 추가하기 전에 기존 노드를 복사합니다. 복사한 노드를 사용하여 append 메소드를 호출합니다. 이렇게 하면 기존 노드는 삭제되지 않습니다.

    #hostingforum.kr
    php
    
    $doc = new DOMDocument();
    
    $fragment = $doc->createDocumentFragment();
    
    
    
    // 기존 노드 복사
    
    $div = $doc->createElement('div');
    
    $fragment->appendChild($div->cloneNode(true));
    
    
    
    // 새로운 노드 추가
    
    $fragment->appendChild($doc->createElement('p'));
    
    
    
    echo $doc->saveHTML();
    
    


    2. 노드를 추가하기 전에 append 메소드를 호출하기 전에 노드를 appendChild 메소드에 추가합니다. appendChild 메소드는 기존 노드를 삭제하지 않습니다.

    #hostingforum.kr
    php
    
    $doc = new DOMDocument();
    
    $fragment = $doc->createDocumentFragment();
    
    
    
    // 새로운 노드 추가
    
    $fragment->appendChild($doc->createElement('div'));
    
    $fragment->appendChild($doc->createElement('p'));
    
    
    
    echo $doc->saveHTML();
    
    


    3. 노드를 추가하기 전에 노드를 append 메소드에 추가하기 전에 cloneNode 메소드를 호출하여 노드를 복사합니다. cloneNode 메소드는 기존 노드를 삭제하지 않습니다.

    #hostingforum.kr
    php
    
    $doc = new DOMDocument();
    
    $fragment = $doc->createDocumentFragment();
    
    
    
    // 새로운 노드 추가
    
    $fragment->append($doc->createElement('div')->cloneNode(true));
    
    $fragment->append($doc->createElement('p')->cloneNode(true));
    
    
    
    echo $doc->saveHTML();
    
    


    이러한 방법 중 하나를 사용하여 노드를 추가하면 기존 노드가 삭제되지 않습니다.

    2025-03-30 22:09

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 8,232건 / 8 페이지

검색

게시물 검색