Клонируйте 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 и объявления классов многократного использования?
Спасибо,
Теган Снайдер
Ответы
Ответ 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;
к концу.