Чи можливо клонувати об’єкти html-елементів у JavaScript / JQuery?


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 має купу пов'язаних питань.
Фелікс Клінг

Відповіді:


60

Використовуючи свій код, ви можете зробити щось подібне у звичайному JavaScript за допомогою методу cloneNode () :

// 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
Дуже важливо змінити ідентифікатор, коли ви клонуєте елемент.
Драгос Дурлут

285

З рідним JavaScript:

newelement = element.cloneNode(bool)

де булева вказує, чи потрібно клонувати дочірні вузли чи ні.

Ось повна документація на MDN .


50
найкраща відповідь. не використовуйте jquery там, де він вам не потрібен.
luschn

Виглядає добре ... але сумісність браузера ставиться під сумнів на сьогодні.
Aniket Suryavanshi

13
@AniketSuryavanshi Я не впевнений, зокрема, 4 лютого, але сумісність виглядає ідеальною сьогодні

2
Ідентифікатори та імена будуть дублюватися. Ідентифікатори НЕОБХІДНІ бути змінені, імена БУДЬ залишені такими, якими вони є, якщо очікуються дублюючі імена.
przemo_li

Шкода, що ти втрачаєш усі атрибути: /
Pieter De Bie

16

Так, ви можете скопіювати діти одного елемента та вставити їх в інший елемент:

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

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

Доказ: http://jsfiddle.net/de9kc/


Дублікати ідентифікаторів будуть проблемою з Вашим підходом
przemo_li




0

В одному рядку:

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

1
Я не думаю, що це допоможе, оскільки значення вашого атрибута - це рядок, який не зміниться.
Jamie R Rytlewski

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/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.