Как клонировать блок HTML?
Я борюсь с клоном Jquery. Я могу клонировать одну строку HTML, но я не знаю, как клонировать блок.
У меня есть этот блок:
<div class="item-name">
<label for="id_form-0-name"></label>
<select id="id_form-0-name" name="form-0-name"></select>
</div>
И мне нужно создать еще два блока, каждый раз меняя атрибуты нового блока, чтобы отразить его положение.
<div class="item-name">
<label for="id_form-1-name"></label>
<select id="id_form-1-name" name="form-1-name"></select>
</div>
<div class="item-name">
<label for="id_form-2-name"></label>
<select id="id_form-2-name" name="form-2-name"></select>
</div>
Любая подсказка о том, что я должен сделать, чтобы получить этот вывод?
3 ответа
Решение
Попробуй это:
$('.item-name').clone().insertAfter('.item-name')
Источник:
1) О clone()
http://api.jquery.com/clone/
2) О insertAfter
http://api.jquery.com/insertAfter/
ДЛЯ ВАШЕГО ДОПОЛНИТЕЛЬНОГО ЗАПРОСА
Попробуйте что-то вроде этого:
$clone = $('.item-name:last').clone();
for (i = 1; i < 999; i++) {
if ($('.item-name select[id=id_form-'+i+'-name]').attr('id') != 'id_form-'+i+'-name') {
$clone.find('select').attr('id', 'id_form-'+i+'-name');
$clone.find('select').attr('name', 'form-'+i+'-name');
$clone.find('label').attr('for', 'id_form-'+i+'-name');
break;
}
}
$clone.insertAfter('.item-name:last');
Попробуйте это (клонировать дважды):
$('.item-name:last').clone().insertAfter($('.item-name:last')).clone().insertAfter($('.item-name:last'));
Так что клонируйте его и увеличивайте атрибуты. Вы можете сделать это в одну строку, но чтобы было легко следовать:
var clone=$('.item-name:last').clone();
clone.insertAfter('.item-name:last');
var attrs='id_form-' + clone.index() + '-name';
clone.find('label').attr('for', attrs);
clone.find('select').attr({id: attrs, name: attrs});