template 태그 & fragment

2020. 3. 1. 01:15JavaScript

* HTML <template> 요소

 - 페이지를 불러오고 바로 화면에 표시되지는 않음

 - <template> 안에 담긴 HTML 코드를 JavaScript를 이용해 인스턴스로 생성할 수 있음

 - 템플릿이 담고 있는 DOM 하위 트리를 나타내는 DocumentFragment인 content 속성을 가짐

 

 

 

 - template 태그의 예시

 

<template id="commentTemplate">
  <li class="comment">
    <div class="username"></div>
    <div class="body"></div>
    <button>좋아요</button>
  </li>
</template>

<ul id="comments"></ul>

 

 - 위의 예시에서 li에 접근하기 위해서는 template -> content -> children[0] 으로 접근

 - children이 HTMLCollection의 유사배열 형태이기 때문에 인덱스를 적어줘야 함

 

 

 

 - username에 접근하기 위해서는 template -> content -> children[0] -> children[0] 으로 접근

 

 

 

 - template 태그 안에 작성된 HTML 코드를 화면에 표시하기 위해서는 JavaScript를 이용해 인스턴스를 생성

 

let template = document.querySelector("#commentTemplate");
// querySelector로 작성된 template HTML코드를 가져온다

let newContent = document.importNode(template.content, true);
// 외부 문서의 노드 === 가져온 template 코드를 복사해 현재 문서에 넣어준다
// let 추가될 노드 = document.importNode(다른 문서에서 가져올 노드, 자식 요소들까지 가져올지: Boolean)

document.querySelector("#comments").appendChild(newContent);
// 해당 아이디를 가지는 ul에 복사된 노드를 조립

 

 - 먼저 querySelector로 작성된 template HTML코드를 가져온다.

 - importNode를 이용해 외부 문서의 노드 === 가져온 template 코드를 복사해 현재 문서에 넣어준다.

    -> let 추가될 노드 = document.importNode(다른 문서에서 가져올 노드, 자식 요소들까지 가져올지: Boolean)

 - 해당 아이디를 가지는 ul에 복사된 노드를 조립한다.

 

 

 

* DocumentFragment

 - 부모가 없는 단순한 형태의 문서 객체를 나타냄

 - DOM 서브트리를 조립해서 DOM에 삽입하기 위한 용도로 사용됨

 - 활성화된 문서 트리의 일부가 아니다

 - 그렇기 때문에fragment에 가하는 변경사항은 분서에 영향을 주지 않고, 성능에 큰 영향을 미치지 않음

 - <template> 요소도 template.content 속성에 DocumentFragment를 가지고 있음

 - 빈 DocumentFragment는 document.createDocumentFragment( ) 를 이용해 생성

 

 

 - fragment 삽입 예시

 

const fragment = document.createDocumentFragment();
[1, 2, 3, 4].forEach(elem => {
  const div = document.createElement("div");
  div.style.border = "1px solid black";
  div.style.width = "100px";
  div.style.height = "100px";
  fragment.appendChild(div);
});
container.appendChild(fragment);

 

 - document.createDocumentFragment( ) 를 이용해 div 4개를 생성하고 container에 조립해준다.

 

 

 

'JavaScript' 카테고리의 다른 글

function method, this  (0) 2020.03.18
rest parameter, arguments, spread 연산자  (0) 2020.03.03
split, slice, substring  (0) 2020.02.15
concat, indexOf, includes  (0) 2020.02.15
object의 메소드  (0) 2020.02.14