0Pricing
HTML Academy · Ders

cloneNode ile Şablonları Klonlama

cloneNode(true) ile şablon içeriğini verimli biçimde çoğaltın

cloneNode ile Şablonları Klonlama, CoddyKit'te ücretsiz bir HTML Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, HTML Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. HTML Academy kursu toplamda 4 dersten oluşur.

Derin ve Sığ Kopya

cloneNode yöntemi bir boolean bağımsız değişkeni kabul eder:

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

Tek Bir template'ten Birden Çok Kopya

template'ler istenen sayıda klonlanabilir:

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 ve Performans

Performans için DOM güncellemelerini DocumentFragment kullanarak toplu hâlde gerçekleştirin:

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

Klonlama ve Olay Dinleyicileri

Özgün template üzerindeki olay dinleyicileri kopyalanmaz:

// 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

Klonlamadan Sonra Dinleyici Ekleme

Olayları klonlamadan sonra ekleyin:

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));

importNode Kullanımı

document.importNode, cloneNode için bir alternatiftir:

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

template Yuvalarına Ön Bakış

Web Bileşenleri, içeriği template'lere eklemek için adlandırılmış yuvalar kullanır:

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

Klonlanan İçeriği Güncelleme

Klonlanan template içeriğini doldurma yöntemleri:

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}`;

document.createElement ile Karşılaştırma

Tekrarlanan öğeler için template ile createElement karşılaştırması:

// 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

Bellek ve template'ler

template'lerin bellek davranışı:

  • template'ler bellekte DocumentFragment olarak saklanır
  • Klonlar bağımsız kopyalardır — DOM'dan kaldırıldıklarında çöp toplayıcı tarafından toplanırlar
  • DOM öğesi var olduğu sürece template'lerin kendisi bellekte kalır
  • Dinamik template'ler için template başvurusunu işlevin dışında önbelleğe alın

Tarayıcı Desteği

template öğesi desteği:

  • Yaklaşık 2014'ten beri tüm modern tarayıcılarda desteklenir
  • IE desteği yoktur (IE kullanım ömrünün sonuna ulaşmıştır)
  • Modern projeler için uyumluluk dolgusu gerekmez

Hızlı Kontrol

Bir template klonlandıktan sonra olay dinleyicileri neden yeniden eklenmelidir?

Tekrar: cloneNode

cloneNode için temel noktalar:

  • cloneNode(true) — tüm alt öğeler dâhil derin kopya
  • Olay dinleyicileri kopyalanmaz — klonlamadan sonra yeniden ekleyin
  • Performans için ekleme işlemlerini DocumentFragment ile toplu hâlde gerçekleştirin
  • template başvurusunu oluşturma döngülerinin dışında önbelleğe alın
  • Güvenli metin eklemek için textContent kullanın

Sıkça Sorulan Sorular

“cloneNode ile Şablonları Klonlama” dersi ücretsiz mi?

Evet — “cloneNode ile Şablonları Klonlama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve HTML Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. HTML Academy kursu toplamda 4 dersten oluşur.

“cloneNode ile Şablonları Klonlama” dersinde ne öğreneceğim?

cloneNode(true) ile şablon içeriğini verimli biçimde çoğaltın HTML Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

HTML Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te HTML Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“cloneNode ile Şablonları Klonlama” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu HTML Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her HTML Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. template Öğesi: İşlenmeyen İçerik
  2. cloneNode ile Şablonları Klonlama
  3. JavaScript ile Görüntülemede template Kullanımı
  4. Şablonlar ve innerHTML Güvenliği
← HTML Academy Sayfasına Dön