Подтвердить что ты не робот

Клонируйте div и измените его идентификатор, и все его дети будут уникальными

Используя JQuery, можно клонировать Div как это и изменить, добавить новый идентификатор к нему ID и всех его идентификаторов детей?

Например, я хотел бы иметь возможность клонировать это:

<div id="current_users">
<table id="user_list">
<tr id="user-0">
<td id="first_name-0">Jane</td>
<td id="last_name-0">Doe</td>
</tr>
<tr id="user-1">
<td id="first_name-1">John</td>
<td id="last_name-1">Doe</td>
</tr>
</table>
</div>

И пусть он выглядит так:

<div id="current_users_cloned">
<table id="user_list_cloned">
<tr id="user-0_cloned">
<td id="first_name-0_cloned">Jan</td>
<td id="last_name-0_cloned">Doe</td>
</tr>
<tr id="user-1_cloned">
<td id="first_name-1_cloned">John</td>
<td id="last_name-1_cloned">Doe</td>
</tr>
</table>
</div>

Или мне нужно просто переосмыслить свою структуру и использовать атрибуты rel и объявления классов многократного использования?

Спасибо,

Теган Снайдер

4b9b3361

Ответ 1

$("#current_users").clone(false).find("*[id]").andSelf().each(function() { $(this).attr("id", $(this).attr("id") + "_cloned"); });

И наблюдайте за событиями, если они есть. Вам придется исправить их, если они полагаются на идентификаторы.

Ответ 2

Если вам действительно не нужно однозначно идентифицировать каждый из этих клонированных DIV через код, я бы заменил ваш идентификатор на классы повторного использования. В противном случае ответ Дэвида Мортона выглядит так, как будто это может сделать трюк.

Ответ 3

Дэвид Мортон получил правильный ответ еще в 2010 году, но я просто хотел его обновить. jQuery удалил .andSelf() в 3.0.0 (см. ответ adeneo). Самым последним и лучшим (на момент написания этой статьи) является .addBack(). Таким образом, строка будет:

$("#current_users").clone(false).find('*[id]').addBack().each(function () { $(this).attr('id', function(i , id) { return id + "_cloned" + ruleId}) });

Если вам нужно вернуть его в виде строки, как это было для меня, добавьте .get(0).outerHTML; к концу.