JavaScript / JQueryでHTML要素オブジェクトを複製することは可能ですか?


100

問題を解決するためのヒントを探しています。

テーブルにhtml要素(選択ボックスの入力フィールドなど)があります。次に、オブジェクトをコピーして、そのコピーから新しいオブジェクトを生成し、それをJavaScriptまたはjQueryで生成します。これは何とかうまくいくと思いますが、現時点では少し無知です。

このようなもの(疑似コード):

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

newDdl = oldDdl;

oldDdl.attr('id', newId);

oldDdl.html();

3
stackoverflow.com/search?q=jquery+copy+element+contentには、関連する質問がたくさんあります。
Felix Kling 2012

回答:


60

コードを使用すると、cloneNode()メソッドを使用してプレーンなJavaScriptで次のようなことができます。

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

またはjQuery clone()メソッドを使用します最も効率的ではありません)。

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

30
要素を複製するときは、IDを変更することが非常に重要です。
Dragos Durlut 2012年

284

ネイティブJavaScriptの場合:

newelement = element.cloneNode(bool)

ブール値は、子ノードを複製するかどうかを示します。

MDNに関する完全なドキュメントは次のとおりです。


50
ベストアンサー。必要のない場所ではjqueryを使用しないでください。
luschn 2014年

良さそうに見えます...しかし、ブラウザの互換性は今日の時点で疑わしいです。
Aniket Suryavanshi 2015

13
@AniketSuryavanshi特に2月4日はわかりませんが、今日の互換性は完璧に見えます

2
IDと名前は重複します。IDは変更する必要があります。名前の重複が予想される場合は、名前をそのままにしておくことができます。
przemo_li 2017

残念ながら、すべての属性を失います:/
Pieter De Bie

16

はい、ある要素の子をコピーして、他の要素に貼り付けることができます。

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

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

証明:http : //jsfiddle.net/de9kc/


IDの重複は、あなたのアプローチの問題になります
przemo_li 2017





0

セレクタとして「#foo2」を選択する必要があります。次に、html()で取得します。

ここにhtmlがあります:

<div id="foo1">

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

これがjavascriptです:

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

ここにjsfiddleがあります:http ://jsfiddle.net/fritzdenim/DhCjf/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.