2013-06-10 2 views
0

이것은 이상한 행동입니다. 문서를 다시 설정하지는 않았지만 추가 한 후에 즉시 문서를 사용했습니다. 이전에 포함 된 요소는 없었습니다.documentFragment 요소 자체가 재설정됩니까?

이렇게 정리해야합니까?

frag_inner = ''; 

내가 모르는 부작용이 있습니까? 나는 그것이로, 실제로 예상되는 동작이라고 생각

frag_outer = NS.createDocumentFragment(); 
frag_inner = NS.createDocumentFragment(); 

NS.eachIndex(obj, function(val) { 

    // fragment element - inner 

    // image element 

    val.view_picture = (val.picture === '0') ? this.A.images + 'generic_large.jpg' : 
      this.A.pictures + val.h_file + '-2.jpg'; 
    img_element = $A.createElement('img'); 
    img_element.className = 'tweet'; 
    img_element.src = val.view_picture; 
    frag_inner.appendChild(img_element); 

    // link element 

    link_element = $A.createElement('a'); 
    link_element.className = 'tweet'; 
    link_element.innerHTML = val.name + ' posted ' + 
      this.prettyTime(val.time) + '<br>'; 
    frag_inner.appendChild(link_element); 

    // paragraph element 

    par_element = $A.createElement('p'); 
    par_element.className = 'tweet'; 
    par_element.innerHTML = val.tweet; 
    frag_inner.appendChild(par_element); 

    // div element 

    div_element = $A.createElement('div'); 
    div_element.className = 'tweet'; 
    div_element.appendChild(frag_inner); 

    // append the div which is now populated 

    frag_outer.appendChild(div_element); 

}, this); 

답변

2

...

1) 기존의 노드를 이동 Node.appendChild의 잘 알려진 기능입니다. 워드 프로세서 (MDN ...)에 상기 된 바와 같이

[Node.appendChild] ...

지정된 부모 노드의 자식리스트의 마지막에 노드를 추가한다. 노드가 이미 존재하면 현재 노드 상위 노드에서 제거 된 다음 새 상위 노드에 추가됩니다.

2) documentFragment을 추가 할 때, 당신은 실제로 다시 모든 자식 (MDN) 추가 :

다양한 다른 방법 (예를 들어, 어떤 노드 인터페이스 메소드 같은 인수 로 문서 조각을 취할 수 Node.appendChild 및 Node.insertBefore).이 경우 조각의 하위 노드는 조각 자체가 아닌 이 추가되거나 삽입됩니다.

요점은 someNode.append (documentFragment)를 수행 할 때 모든 자식을 제거한 다음 someNode에 추가한다는 것입니다. 그 결과로 documentFragment이 비어 있습니다. 당신이 (분명히, 빈 문자열) 새로운 값을 저장 -이 작업을 수행 할 때 ...

frag_inner = ''; 

가 ...이 변수에 저장된의 DocumentFragment을 삭제하지 않을 것을


주 그 대신에. documentFragment에서와 마찬가지로 가장 먼저 작업을 시도하면 TypeError: Object has no method 'appendChild'과 같은 결과가 발생합니다.

+0

"정상적인"동작 인 것 같습니다. documentFragment를 DOM에 추가하면 내용이 제거됩니다. 다행히 두 번 추가하고 싶지 않았어. –

+0

... appendChild가이 동작을 제어하는 ​​것처럼 보입니다. '현재 노드에서 제거됩니다.' –

관련 문제