[Javascript] documentFragment

15291 ワード

初めてJSでドームを作成しましたが、どうやってドームを追加しますか?


document.createElement()として作成し、appendChild()を使用して直ちにDOMに登録します.

通常のDOM要素を作成します。

<body>
  	<script>
    for(let i=0; i<10; i++) {
      let divEl = document.createElement('div');
      divEl.innerText = 'hello' + i;
      document.body.appendChild(divEl);
      // body 태그에 만든 div요소를 바로 붙여넣음
    }
	</script>
</body>
この場合、DocumentFragmentノードを使用して、メモリにのみ存在する軽量レベルのDOMを作成できます.
<body>
  	<script>
  	const docFrag = document.createDocumentFragment();
	// const test = document.createElement('div');
  
    for(let i=0; i<10; i++) {
      let divEl = document.createElement('div');
      divEl.innerText = 'hello' + i;
      docFrag.appendChild(divEl);
      // test.appendChild(divEl);
    }

	console.log(docFrag.childNodes); // 자식 요소들 출력
	document.body.appendChild(docFrag);
	// => 별 다른 부모 요소없이 원하는 자식 요소들만 dom에 추가할 수 있게 됨!
	console.log(docFrag.childNodes); // 자식 요소 X

	// document.body.appendChild(test); 
	// => 요렇게 해버리면 아무 의미없는 부모 요소가 생성되게 됨!
	</script>
</body>

DocumentFragmentの特性!

  • DocumentFragmentをDOMノードに追加するもDocumentFragmentノードは登録されず、そのサブノード
  • のみが追加される.
  • DocumentFragmentをDOMに追加すると、DocumentFragmentノードのサブエレメントはメモリに存在しなくなります.
    ->メモリから自動的に削除されました.
  • =>これらの特性のため、要素を複数の異なる親要素に入れると、それらの符号化がより明確になります.
    <body>
      	<div class="container"/>
      	<div class="container"/>
      	<div class="container"/>
      	<script>
        	let elements = [];
    
    		for(let i=0; i<100; i++) {
              conse el = document.createElement('div');
              elements.push(el);
            }
    
    		const cont = document.querySelectorAll(".container");
    
    		for(let i=0; i<cont.length; i++) {
              	for(let j=0; j<elements.length; j++) {
                  	cont[i].appendChild(elements[j].cloneNode(true));
                 	// 이렇게 할시, 배열은 참조 타입이기 때문에 el 자체를 복사할 수 있게끔
                }
            }
    	</script>
    </body>
    <body>
      	<div class="container"/>
      	<div class="container"/>
      	<div class="container"/>
      	<script>
          	const frag = document.createDocumentFragment();
    
        	let elements = [];
    
    		for(let i=0; i<100; i++) {
              conse el = document.createElement('div');
              elements.push(el);
              frag.appendChild(el);
            }
    
    		const cont = document.querySelectorAll(".container");
    
    		for(let i=0; i<cont.length; i++) {
              	cont[i].appendChild(frag.cloneNode(true));
              	// 한번에 뽝 자식 생성!
            }
    	</script>
    </body>

    整理する

  • DocumentFragmentノード
    1)メモリにのみ存在する軽量レベルDOM
    2)DocumentFragmentをDOMノードに追加してもDocumentFragmentノード自体は追加されず、そのサブノードのみが追加される
    3)DocumentFragmentをDOMに追加すると、DocumentFragmentのサブノードは作成したメモリの場所に存在しなくなります.これを維持するには、cloneNodeを使用して
  • をコピーします.