@ivansimonov1984

Как клонировать селект с изменением id?

Есть код.

Использую selectize для стилизации select.

При клонировании не получается для клонов select задать новый id.
Как это сделать?
  • Вопрос задан
  • 183 просмотра
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Очень странный способ клонировать select'ы - сохранить настройки плагина клонируемых элементов, деактивировать плагин на клонируемых элементах, клонировать элементы, инициализировать плагин у клонов и повторно у оригиналов, обновить настройки. Можно сделать попроще: в самом начале сделать клон элементов, и потом уже клонировать его; инициализацию плагина вынести в отдельную функцию, которая будет принимать набор элементов.

Странный способ получать новые значения id - единица в качестве начального значения и постфиксный инкремент. В результате последовательность идентификаторов получается такая: 1, 2, 3,... Элементы с 1 и 2 уже есть. Начальным значением должно быть максимальное существующее значение плюс единица. Или просто максимум, но инкремент тогда префиксный.

const $row = $('.b-items').clone();
let ID = +$row.find('select').last().attr('id').split('-').pop();

function selectize($el) {
  $el.selectize({
    allowEmptyOption: true,
    create: true,
  });
}

selectize($('select'));

$('.btn-clone').on('click', function() {
  selectize($row
    .clone()
    .insertBefore(this)
    .find('select')
    .attr('id', () => `select-${++ID}`)
  );
});
Ответ написан
alams_stoyne
@alams_stoyne
Full Stack Developer - #PHP #CSS #JS #DB
Всё проще:
$('select').selectize({
  allowEmptyOption: true,
  create: true
});
var cloneID = 1;
$(document).on('click', '.btn-clone', function(e) {
  e.preventDefault();
  var lastRow = $(this).parents('.b-parent').find('.b-items').last();
  cloneID = lastRow.find('select').size();
  var newRow = lastRow.clone().insertAfter(lastRow);
   newRow.find('select').each(function(e) {
   	cloneID++;
   	$(this).attr("id","select-"+cloneID);
   });
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы