Vorlagen mit cloneNode klonen
Erzeugen Sie Vorlageninhalte effizient mit cloneNode(true)
Vorlagen mit cloneNode klonen ist eine kostenlose HTML Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des HTML Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der HTML Academy-Kurs umfasst insgesamt 4 Lektionen.
Tiefer und flacher Klon
Die Methode cloneNode akzeptiert ein boolesches Argument:
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 templatesMehrere Klone aus einem Template
Templates können beliebig oft geklont werden:
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 und Performance
Stapelweise DOM-Aktualisierungen mit DocumentFragment für bessere Performance:
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 performanceKlonen und Event-Listener
Event-Listener des ursprünglichen Templates werden NICHT kopiert:
// 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 cloningListener nach dem Klonen hinzufügen
Fügen Sie Events nach dem Klonen hinzu:
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 verwenden
document.importNode ist eine Alternative zu 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 cloneNodeVorschau auf Template-Slots
Web Components verwenden benannte Slots, um Inhalte in Templates einzufügen:
<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 -->Geklonten Inhalt aktualisieren
Methoden zum Befüllen des Inhalts eines geklonten Templates:
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}`;Vergleich mit document.createElement
template im Vergleich zu createElement für wiederkehrende Elemente:
// 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 nestingSpeicher und Templates
Speicherverhalten von Templates:
- Templates werden als DocumentFragments im Speicher abgelegt
- Klone sind unabhängige Kopien – sie werden von der Garbage Collection entfernt, sobald sie aus dem DOM entfernt wurden
- Die Templates selbst bleiben bestehen, solange das DOM-Element existiert
- Bei dynamischen Templates sollten Sie die Template-Referenz außerhalb der Funktion zwischenspeichern
Browserunterstützung
Unterstützung des template-Elements:
- Seit etwa 2014 von allen modernen Browsern unterstützt
- Keine Unterstützung im IE (der IE hat das Ende seines Lebenszyklus erreicht)
- Für moderne Projekte ist kein Polyfill erforderlich
Kurze Überprüfung
Warum müssen Event-Listener nach dem Klonen eines Templates erneut hinzugefügt werden?
Zusammenfassung: cloneNode
Das Wichtigste zu cloneNode:
cloneNode(true)– tiefe Kopie einschließlich aller Nachfahren- Event-Listener werden NICHT kopiert – fügen Sie sie nach dem Klonen erneut hinzu
- Hängen Sie Elemente für bessere Performance stapelweise mit DocumentFragment an
- Speichern Sie die Template-Referenz außerhalb von Render-Schleifen zwischen
- Verwenden Sie textContent für das sichere Einfügen von Text
Häufig gestellte Fragen
Ist die Lektion „Vorlagen mit cloneNode klonen“ kostenlos?
Ja — der vollständige Text von „Vorlagen mit cloneNode klonen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des HTML Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der HTML Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Vorlagen mit cloneNode klonen“?
Erzeugen Sie Vorlageninhalte effizient mit cloneNode(true) Du übst HTML Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um HTML Academy zu starten?
Keine Vorkenntnisse erforderlich. HTML Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Vorlagen mit cloneNode klonen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser HTML Academy-Lektion Code schreiben und ausführen?
Ja. Jede HTML Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Das template-Element: inaktive Inhalte
- Vorlagen mit cloneNode klonen
- template für das Rendern mit JavaScript verwenden
- Vorlagen gegenüber innerHTML: Sicherheit