https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template
HTML5의
<template>태그는 클라이언트 측 템플릿을 정의하고, 이를 스크립트로 인스턴스화하여 동적으로 콘텐츠를 생성하는 데 사용됩니다. 이것은 웹 개발에서 특히 중요한 기능 중 하나로, 미리 정의된 템플릿을 사용하여 동적 콘텐츠를 생성하거나 변경할 수 있습니다.
<template>태그의 주요 특징과 사용법은 다음과 같습니다:
정의만, 렌더링은 하지 않음:
<template>태그 내부의 콘텐츠는 페이지가 로드될 때 렌더링되지 않습니다. 대신, 이 콘텐츠는 브라우저에 의해 파싱되고 메모리에 저장됩니다.스크립트로 인스턴스화: JavaScript를 사용하여
<template>내의 콘텐츠를 복제하고 동적으로 삽입할 수 있습니다. 이를 통해 동적 UI 업데이트 및 컴포넌트 재사용이 가능해집니다.브라우저 호환성:
<template>태그는 대부분의 최신 브라우저에서 지원됩니다. 레거시 브라우저에 대한 폴백을 구현해야 할 수도 있습니다.예를 들어, 다음은
<template>태그의 간단한 사용 예제입니다:<!DOCTYPE html> <html> <head> <title>Template Example</title> </head> <body> <!-- 템플릿 정의 --> <template id="myTemplate"> <h1>Hello, <span id="name"></span>!</h1> </template> <!-- 템플릿 인스턴스화 및 콘텐츠 삽입 --> <script> // 템플릿 요소 가져오기 var template = document.getElementById("myTemplate"); // 템플릿 내의 요소를 복제하고 콘텐츠 설정 var instance = document.importNode(template.content, true); instance.querySelector("#name").textContent = "John"; // 콘텐츠를 문서에 삽입 document.body.appendChild(instance); </script> </body> </html>이 예제에서는
<template>태그를 사용하여 템플릿을 정의하고, JavaScript를 사용하여 템플릿을 인스턴스화하고 문서에 추가된 결과를 볼 수 있습니다. 이러한 방식으로 동적으로 콘텐츠를 생성하고 활용할 수 있습니다.
document.importNode()함수는 DOM 요소를 복제하고 복제된 노드를 반환하는 JavaScript 함수입니다. 위의 예제에서var instance = document.importNode(template.content, true);코드 줄을 자세히 설명하겠습니다.
document:document는 현재 웹 페이지의 DOM(Document Object Model)에 접근하는 JavaScript의 전역 객체입니다. DOM은 HTML 문서의 구조와 콘텐츠를 표현하는 객체 모델로, 웹 페이지의 요소에 대한 조작 및 조작을 가능하게 합니다.
importNode():document객체의 메서드 중 하나로, DOM 노드를 복제하고 새로운 노드를 생성하는 데 사용됩니다.
template.content: 이 코드에서template은<template>요소를 나타내며,content속성은 해당 템플릿의 내용을 나타냅니다.<template>태그 내의 모든 자식 요소와 텍스트는content속성에 포함됩니다.
true:importNode()함수의 두 번째 매개변수는deep라고 불리며, 복제 프로세스의 깊이를 나타냅니다.true를 전달하면, 템플릿의 내용 및 하위 요소들이 모두 복제됩니다. 이것은 템플릿의 모든 자식 요소와 그 내용까지 복제하려는 경우에 유용합니다.따라서
var instance = document.importNode(template.content, true);코드는 다음을 수행합니다:
template요소의 내용과 하위 요소들을 모두 복제합니다.- 이 복제된 내용을
instance변수에 저장합니다.결과적으로,
instance변수에는 템플릿 내용의 복제본이 들어 있으며, 이 복제본은 원본 템플릿을 변경하지 않습니다. 이제instance를 조작하거나 문서에 추가함으로써 동적으로 웹 페이지의 콘텐츠를 생성하고 변경할 수 있습니다.