Ist es möglich, HTML-Elementobjekte in JavaScript / JQuery zu klonen?


100

Ich suche nach Tipps, wie ich mein Problem lösen kann.

Ich habe ein HTML-Element (wie ein Eingabefeld für ein Auswahlfeld) in einer Tabelle. Jetzt möchte ich das Objekt kopieren und aus der Kopie ein neues generieren, und zwar mit JavaScript oder jQuery. Ich denke, das sollte irgendwie funktionieren, aber ich bin im Moment ein bisschen ahnungslos.

So etwas (Pseudocode):

oldDdl = $("#ddl_1").get(); 

newDdl = oldDdl;

oldDdl.attr('id', newId);

oldDdl.html();

Antworten:


60

Mit Ihrem Code können Sie so etwas in einfachem JavaScript mit der Methode cloneNode () tun :

// Create a clone of element with id ddl_1:
let clone = document.querySelector('#ddl_1').cloneNode( true );

// Change the id attribute of the newly created element:
clone.setAttribute( 'id', newId );

// Append the newly created element on element p 
document.querySelector('p').appendChild( clone );

Oder verwenden Sie die jQuery clone () -Methode (nicht die effizienteste):

$('#ddl_1').clone().attr('id', newId).appendTo('p'); // append to where you want

30
Es ist SEHR wichtig, die ID zu ändern, wenn Sie ein Element klonen.
Dragos Durlut

284

Mit nativem JavaScript:

newelement = element.cloneNode(bool)

Dabei gibt der Boolesche Wert an, ob untergeordnete Knoten geklont werden sollen oder nicht.

Hier finden Sie die vollständige Dokumentation zu MDN .


50
beste Antwort. Verwenden Sie jquery nicht dort, wo Sie es nicht benötigen.
Luschn

Sieht gut aus ... aber die Browserkompatibilität ist ab heute fraglich.
Aniket Suryavanshi

13
@ AniketSuryavanshi Ich bin nicht sicher über den 4. Februar im Besonderen, aber die Kompatibilität sieht heute perfekt aus

2
IDs und Namen werden dupliziert. IDs MÜSSEN geändert werden, Namen KÖNNEN unverändert bleiben, wenn doppelte Namen erwartet werden.
przemo_li

Schade, dass Sie alle Attribute verlieren: /
Pieter De Bie

16

Ja, Sie können untergeordnete Elemente eines Elements kopieren und in das andere Element einfügen:

var foo1 = jQuery('#foo1');
var foo2 = jQuery('#foo2');

foo1.html(foo2.children().clone());

Beweis: http://jsfiddle.net/de9kc/


Doppelte IDs sind ein Problem mit Ihrem Ansatz
przemo_li

4

In jQuery ist das eigentlich sehr einfach:

$("#ddl_1").clone().attr("id",newId).appendTo("body");

Ändern Sie .appendTo () natürlich ...


2

Sie können die clone () -Methode verwenden, um eine Kopie zu erstellen.

$('#foo1').html( $('#foo2 > div').clone())​;

FIDDLE HIER



0

In einer Zeile:

$('#selector').clone().attr('id','newid').appendTo('#newPlace');

1
Ich denke nicht, dass dies helfen wird, da Ihr Attributwert eine Zeichenfolge ist, die sich nicht ändert.
Jamie R Rytlewski

0

Sie müssen "# foo2" als Auswahl auswählen. Dann holen Sie es sich mit html ().

Hier ist das HTML:

<div id="foo1">

</div>
<div id="foo2">
    <div>Foo Here</div>
</div>​

Hier ist das Javascript:

$("#foo2").click(function() {
    //alert("clicked");
    var value=$(this).html();
    $("#foo1").html(value);
});​

Hier ist die jsfiddle: http://jsfiddle.net/fritzdenim/DhCjf/

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.