Mengkloning Template dengan cloneNode
Gandakan konten template secara efisien dengan cloneNode(true).
Mengkloning Template dengan cloneNode adalah pelajaran HTML Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar HTML Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus HTML Academy mencakup 4 pelajaran total.
Deep vs Shallow Clone
Metode cloneNode menerima argumen boolean:
const template = document.getElementById('card-tmpl');
// Deep clone (true): copies all descendants
const deep = template.content.cloneNode(true);
// Shallow clone (false): only the root node, no children
const shallow = template.content.cloneNode(false);
// shallow has no children — use deep for templatesBeberapa Salinan dari Satu Template
Template dapat dikloning berapa kali pun:
const tmpl = document.getElementById('item-tmpl');
const container = document.getElementById('list');
['Alpha', 'Beta', 'Gamma'].forEach((name, i) => {
const clone = tmpl.content.cloneNode(true);
clone.querySelector('.item-name').textContent = name;
clone.querySelector('.item-num').textContent = i + 1;
container.appendChild(clone);
});
// 3 separate clones — modifying one doesn't affect othersDocumentFragment dan Performa
Lakukan pembaruan DOM secara berkelompok menggunakan DocumentFragment untuk meningkatkan performa:
const frag = document.createDocumentFragment();
const tmpl = document.getElementById('row-tmpl');
rows.forEach(row => {
const clone = tmpl.content.cloneNode(true);
// fill in clone...
frag.appendChild(clone);
});
// ONE DOM append instead of many:
document.getElementById('table-body').appendChild(frag);
// Appending to a fragment doesn't trigger layout; append once for performanceKloning dan Pendengar Peristiwa
Pendengar peristiwa pada template asli TIDAK disalin:
// Template definition:
const tmpl = document.getElementById('btn-tmpl');
const origBtn = tmpl.content.querySelector('.btn');
origBtn.addEventListener('click', () => console.log('click'));
// Clone:
const clone = tmpl.content.cloneNode(true);
const cloneBtn = clone.querySelector('.btn');
// cloneBtn does NOT have the click listener!
// You must re-add listeners after cloningMenambahkan Pendengar Setelah Kloning
Pasang peristiwa setelah kloning:
function createCard(data) {
const clone = document.getElementById('card-tmpl').content.cloneNode(true);
const deleteBtn = clone.querySelector('.delete-btn');
deleteBtn.addEventListener('click', () => deleteItem(data.id));
clone.querySelector('.title').textContent = data.title;
return clone; // return the fragment
}
document.getElementById('list').appendChild(createCard(item));Menggunakan importNode
document.importNode adalah alternatif untuk cloneNode:
const tmpl = document.getElementById('card-tmpl');
// Equivalent to tmpl.content.cloneNode(true):
const clone = document.importNode(tmpl.content, true);
// importNode adopts the node into the current document
// In the same document, this is functionally identical to cloneNodePratinjau Slot Template
Komponen Web menggunakan slot bernama untuk menyisipkan konten ke dalam template:
<template id="card-tmpl">
<div class="card">
<slot name="title">Default Title</slot>
<slot name="body">Default body text.</slot>
</div>
</template>
<!-- slot elements become placeholders for projected content -->
<!-- Covered in full in the Shadow DOM course -->Memperbarui Konten yang Dikloning
Metode untuk mengisi konten template yang telah dikloning:
const clone = tmpl.content.cloneNode(true);
// textContent — safe, no HTML parsing:
clone.querySelector('.name').textContent = user.name;
// innerHTML — only if content is trusted:
clone.querySelector('.bio').innerHTML = trustedHTML;
// setAttribute:
clone.querySelector('.avatar').src = user.avatar;
clone.querySelector('.profile-link').href = `/users/${user.id}`;Membandingkan dengan document.createElement
Perbandingan template dengan createElement untuk item berulang:
// createElement: verbose for complex structures
const card = document.createElement('div');
card.className = 'card';
const title = document.createElement('h2');
card.appendChild(title);
// ... many lines for nested structure
// template: define once, clone efficiently
const clone = tmpl.content.cloneNode(true);
// Complex structure defined in HTML once
// Clone is fast and the template handles nestingMemori dan Template
Perilaku memori template:
- Template disimpan di memori sebagai DocumentFragments
- Klon merupakan salinan independen — dibersihkan oleh pengumpulan sampah saat dihapus dari DOM
- Template itu sendiri tetap ada selama elemen DOM-nya ada
- Untuk template dinamis, simpan referensi template di luar fungsi
Dukungan Peramban
Dukungan elemen template:
- Didukung di semua peramban modern sejak sekitar 2014
- Tidak didukung IE (IE sudah tidak digunakan lagi)
- Tidak diperlukan polyfill untuk proyek modern
Pemeriksaan Singkat
Mengapa pendengar peristiwa harus ditambahkan kembali setelah template dikloning?
Ikhtisar: cloneNode
Hal-hal penting tentang cloneNode:
cloneNode(true)— salinan mendalam yang mencakup semua turunan- Pendengar peristiwa TIDAK disalin — pasang kembali setelah kloning
- Lakukan penambahan secara berkelompok dengan DocumentFragment untuk meningkatkan performa
- Simpan referensi template di luar perulangan render
- Gunakan textContent untuk penyisipan teks yang aman
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mengkloning Template dengan cloneNode” gratis?
Ya — teks lengkap “Mengkloning Template dengan cloneNode” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus HTML Academy, upgrade ke CoddyKit PRO. Kursus HTML Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mengkloning Template dengan cloneNode”?
Gandakan konten template secara efisien dengan cloneNode(true). Kamu berlatih HTML Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai HTML Academy?
Tidak diperlukan pengalaman sebelumnya. HTML Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Mengkloning Template dengan cloneNode” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran HTML Academy ini?
Ya. Setiap pelajaran HTML Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Elemen template untuk Konten Inert
- Mengkloning Template dengan cloneNode
- Menggunakan template dengan Perenderan JavaScript
- Keamanan Template vs innerHTML