0Pricing
HTML Academy · Pelajaran

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 templates

Beberapa 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 others

DocumentFragment 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 performance

Kloning 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 cloning

Menambahkan 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 cloneNode

Pratinjau 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 nesting

Memori 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

  1. Elemen template untuk Konten Inert
  2. Mengkloning Template dengan cloneNode
  3. Menggunakan template dengan Perenderan JavaScript
  4. Keamanan Template vs innerHTML
← Kembali ke HTML Academy